// 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  L_BFu8c_BFu0c  {
  __tsi64 v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 L_BFu8c_BFu0c) C1{ FL Fc:8 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_L_C_BFu0c()
{
  {
    init_simple_test("L_C_BFu0c");
    static STRUCT_IF_C L_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0c)");
    check_field_offset(lv, v1, 0, "L_C_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu0c, L_C_BFu0c)
//============================================================================


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



static void Test_L_C_BFu0i()
{
  {
    init_simple_test("L_C_BFu0i");
    static STRUCT_IF_C L_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0i)");
    check_field_offset(lv, v1, 0, "L_C_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu0i, L_C_BFu0i)
//============================================================================


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



static void Test_L_C_BFu0ll()
{
  {
    init_simple_test("L_C_BFu0ll");
    static STRUCT_IF_C L_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_C_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu0ll, L_C_BFu0ll)
//============================================================================


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



static void Test_L_C_BFu0s()
{
  {
    init_simple_test("L_C_BFu0s");
    static STRUCT_IF_C L_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_C_BFu0s)");
    check_field_offset(lv, v1, 0, "L_C_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_C_BFu0s, L_C_BFu0s)
//============================================================================


struct  L_D_BFu0c  {
  __tsi64 v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 L_D_BFu0c) C1{ FL[2] Fc:0}



static void Test_L_D_BFu0c()
{
  {
    init_simple_test("L_D_BFu0c");
    static STRUCT_IF_C L_D_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0c)");
    check_field_offset(lv, v1, 0, "L_D_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu0c, L_D_BFu0c)
//============================================================================


struct  L_D_BFu0i  {
  __tsi64 v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 L_D_BFu0i) C1{ FL[2] Fi:0}



static void Test_L_D_BFu0i()
{
  {
    init_simple_test("L_D_BFu0i");
    static STRUCT_IF_C L_D_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0i)");
    check_field_offset(lv, v1, 0, "L_D_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu0i, L_D_BFu0i)
//============================================================================


struct  L_D_BFu0ll  {
  __tsi64 v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 L_D_BFu0ll) C1{ FL[2] FL:0}



static void Test_L_D_BFu0ll()
{
  {
    init_simple_test("L_D_BFu0ll");
    static STRUCT_IF_C L_D_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_D_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu0ll, L_D_BFu0ll)
//============================================================================


struct  L_D_BFu0s  {
  __tsi64 v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 L_D_BFu0s) C1{ FL[2] Fs:0}



static void Test_L_D_BFu0s()
{
  {
    init_simple_test("L_D_BFu0s");
    static STRUCT_IF_C L_D_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_D_BFu0s)");
    check_field_offset(lv, v1, 0, "L_D_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_D_BFu0s, L_D_BFu0s)
//============================================================================


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



static void Test_L_F_BFu0c()
{
  {
    init_simple_test("L_F_BFu0c");
    static STRUCT_IF_C L_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0c)");
    check_field_offset(lv, v1, 0, "L_F_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu0c, L_F_BFu0c)
//============================================================================


struct  L_F_BFu0i  {
  __tsi64 v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 L_F_BFu0i) C1{ FL Fi Fi:0}



static void Test_L_F_BFu0i()
{
  {
    init_simple_test("L_F_BFu0i");
    static STRUCT_IF_C L_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0i)");
    check_field_offset(lv, v1, 0, "L_F_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu0i, L_F_BFu0i)
//============================================================================


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



static void Test_L_F_BFu0ll()
{
  {
    init_simple_test("L_F_BFu0ll");
    static STRUCT_IF_C L_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_F_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu0ll, L_F_BFu0ll)
//============================================================================


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



static void Test_L_F_BFu0s()
{
  {
    init_simple_test("L_F_BFu0s");
    static STRUCT_IF_C L_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_F_BFu0s)");
    check_field_offset(lv, v1, 0, "L_F_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_F_BFu0s, L_F_BFu0s)
//============================================================================


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



static void Test_L_I_BFu0c()
{
  {
    init_simple_test("L_I_BFu0c");
    static STRUCT_IF_C L_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0c)");
    check_field_offset(lv, v1, 0, "L_I_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu0c, L_I_BFu0c)
//============================================================================


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



static void Test_L_I_BFu0i()
{
  {
    init_simple_test("L_I_BFu0i");
    static STRUCT_IF_C L_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0i)");
    check_field_offset(lv, v1, 0, "L_I_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu0i, L_I_BFu0i)
//============================================================================


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



static void Test_L_I_BFu0ll()
{
  {
    init_simple_test("L_I_BFu0ll");
    static STRUCT_IF_C L_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_I_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu0ll, L_I_BFu0ll)
//============================================================================


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



static void Test_L_I_BFu0s()
{
  {
    init_simple_test("L_I_BFu0s");
    static STRUCT_IF_C L_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_I_BFu0s)");
    check_field_offset(lv, v1, 0, "L_I_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_I_BFu0s, L_I_BFu0s)
//============================================================================


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



static void Test_L_Ip_BFu0c()
{
  {
    init_simple_test("L_Ip_BFu0c");
    static STRUCT_IF_C L_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu0c, L_Ip_BFu0c)
//============================================================================


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



static void Test_L_Ip_BFu0i()
{
  {
    init_simple_test("L_Ip_BFu0i");
    static STRUCT_IF_C L_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu0i, L_Ip_BFu0i)
//============================================================================


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



static void Test_L_Ip_BFu0ll()
{
  {
    init_simple_test("L_Ip_BFu0ll");
    static STRUCT_IF_C L_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu0ll, L_Ip_BFu0ll)
//============================================================================


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



static void Test_L_Ip_BFu0s()
{
  {
    init_simple_test("L_Ip_BFu0s");
    static STRUCT_IF_C L_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Ip_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ip_BFu0s, L_Ip_BFu0s)
//============================================================================


struct  L_L_BFu0c  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 L_L_BFu0c) C1{ FL[2] Fc:0}



static void Test_L_L_BFu0c()
{
  {
    init_simple_test("L_L_BFu0c");
    static STRUCT_IF_C L_L_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0c)");
    check_field_offset(lv, v1, 0, "L_L_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu0c, L_L_BFu0c)
//============================================================================


struct  L_L_BFu0i  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 L_L_BFu0i) C1{ FL[2] Fi:0}



static void Test_L_L_BFu0i()
{
  {
    init_simple_test("L_L_BFu0i");
    static STRUCT_IF_C L_L_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0i)");
    check_field_offset(lv, v1, 0, "L_L_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu0i, L_L_BFu0i)
//============================================================================


struct  L_L_BFu0ll  {
  __tsi64 v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 L_L_BFu0ll) C1{ FL[2] FL:0}



static void Test_L_L_BFu0ll()
{
  {
    init_simple_test("L_L_BFu0ll");
    static STRUCT_IF_C L_L_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_L_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu0ll, L_L_BFu0ll)
//============================================================================


struct  L_L_BFu0s  {
  __tsi64 v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 L_L_BFu0s) C1{ FL[2] Fs:0}



static void Test_L_L_BFu0s()
{
  {
    init_simple_test("L_L_BFu0s");
    static STRUCT_IF_C L_L_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_L_BFu0s)");
    check_field_offset(lv, v1, 0, "L_L_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_L_BFu0s, L_L_BFu0s)
//============================================================================


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



static void Test_L_S_BFu0c()
{
  {
    init_simple_test("L_S_BFu0c");
    static STRUCT_IF_C L_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0c)");
    check_field_offset(lv, v1, 0, "L_S_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu0c, L_S_BFu0c)
//============================================================================


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



static void Test_L_S_BFu0i()
{
  {
    init_simple_test("L_S_BFu0i");
    static STRUCT_IF_C L_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0i)");
    check_field_offset(lv, v1, 0, "L_S_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu0i, L_S_BFu0i)
//============================================================================


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



static void Test_L_S_BFu0ll()
{
  {
    init_simple_test("L_S_BFu0ll");
    static STRUCT_IF_C L_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_S_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu0ll, L_S_BFu0ll)
//============================================================================


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



static void Test_L_S_BFu0s()
{
  {
    init_simple_test("L_S_BFu0s");
    static STRUCT_IF_C L_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_S_BFu0s)");
    check_field_offset(lv, v1, 0, "L_S_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_S_BFu0s, L_S_BFu0s)
//============================================================================


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



static void Test_L_Uc_BFu0c()
{
  {
    init_simple_test("L_Uc_BFu0c");
    static STRUCT_IF_C L_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu0c, L_Uc_BFu0c)
//============================================================================


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



static void Test_L_Uc_BFu0i()
{
  {
    init_simple_test("L_Uc_BFu0i");
    static STRUCT_IF_C L_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu0i, L_Uc_BFu0i)
//============================================================================


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



static void Test_L_Uc_BFu0ll()
{
  {
    init_simple_test("L_Uc_BFu0ll");
    static STRUCT_IF_C L_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu0ll, L_Uc_BFu0ll)
//============================================================================


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



static void Test_L_Uc_BFu0s()
{
  {
    init_simple_test("L_Uc_BFu0s");
    static STRUCT_IF_C L_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Uc_BFu0s, L_Uc_BFu0s)
//============================================================================


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



static void Test_L_Ui_BFu0c()
{
  {
    init_simple_test("L_Ui_BFu0c");
    static STRUCT_IF_C L_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu0c, L_Ui_BFu0c)
//============================================================================


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



static void Test_L_Ui_BFu0i()
{
  {
    init_simple_test("L_Ui_BFu0i");
    static STRUCT_IF_C L_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu0i, L_Ui_BFu0i)
//============================================================================


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



static void Test_L_Ui_BFu0ll()
{
  {
    init_simple_test("L_Ui_BFu0ll");
    static STRUCT_IF_C L_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu0ll, L_Ui_BFu0ll)
//============================================================================


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



static void Test_L_Ui_BFu0s()
{
  {
    init_simple_test("L_Ui_BFu0s");
    static STRUCT_IF_C L_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ui_BFu0s, L_Ui_BFu0s)
//============================================================================


struct  L_Ul_BFu0c  {
  __tsi64 v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 L_Ul_BFu0c) C1{ FL[2] Fc:0}



static void Test_L_Ul_BFu0c()
{
  {
    init_simple_test("L_Ul_BFu0c");
    static STRUCT_IF_C L_Ul_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ul_BFu0c, L_Ul_BFu0c)
//============================================================================


struct  L_Ul_BFu0i  {
  __tsi64 v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 L_Ul_BFu0i) C1{ FL[2] Fi:0}



static void Test_L_Ul_BFu0i()
{
  {
    init_simple_test("L_Ul_BFu0i");
    static STRUCT_IF_C L_Ul_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ul_BFu0i, L_Ul_BFu0i)
//============================================================================


struct  L_Ul_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 L_Ul_BFu0ll) C1{ FL[2] FL:0}



static void Test_L_Ul_BFu0ll()
{
  {
    init_simple_test("L_Ul_BFu0ll");
    static STRUCT_IF_C L_Ul_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ul_BFu0ll, L_Ul_BFu0ll)
//============================================================================


struct  L_Ul_BFu0s  {
  __tsi64 v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 L_Ul_BFu0s) C1{ FL[2] Fs:0}



static void Test_L_Ul_BFu0s()
{
  {
    init_simple_test("L_Ul_BFu0s");
    static STRUCT_IF_C L_Ul_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Ul_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Ul_BFu0s, L_Ul_BFu0s)
//============================================================================


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



static void Test_L_Us_BFu0c()
{
  {
    init_simple_test("L_Us_BFu0c");
    static STRUCT_IF_C L_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Us_BFu0c, L_Us_BFu0c)
//============================================================================


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



static void Test_L_Us_BFu0i()
{
  {
    init_simple_test("L_Us_BFu0i");
    static STRUCT_IF_C L_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Us_BFu0i, L_Us_BFu0i)
//============================================================================


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



static void Test_L_Us_BFu0ll()
{
  {
    init_simple_test("L_Us_BFu0ll");
    static STRUCT_IF_C L_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Us_BFu0ll, L_Us_BFu0ll)
//============================================================================


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



static void Test_L_Us_BFu0s()
{
  {
    init_simple_test("L_Us_BFu0s");
    static STRUCT_IF_C L_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Us_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Us_BFu0s, L_Us_BFu0s)
//============================================================================


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



static void Test_L_Vp_BFu0c()
{
  {
    init_simple_test("L_Vp_BFu0c");
    static STRUCT_IF_C L_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0c.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Vp_BFu0c, L_Vp_BFu0c)
//============================================================================


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



static void Test_L_Vp_BFu0i()
{
  {
    init_simple_test("L_Vp_BFu0i");
    static STRUCT_IF_C L_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0i.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Vp_BFu0i, L_Vp_BFu0i)
//============================================================================


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



static void Test_L_Vp_BFu0ll()
{
  {
    init_simple_test("L_Vp_BFu0ll");
    static STRUCT_IF_C L_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Vp_BFu0ll, L_Vp_BFu0ll)
//============================================================================


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



static void Test_L_Vp_BFu0s()
{
  {
    init_simple_test("L_Vp_BFu0s");
    static STRUCT_IF_C L_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "L_Vp_BFu0s.v1");
    check_field_offset(lv, v2, 8, "L_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_Vp_BFu0s, L_Vp_BFu0s)
//============================================================================


struct  S_BFu0c  {
  short v1;
  unsigned char  :0;
};
//SIG(1 S_BFu0c) C1{ Fs Fc:0}



static void Test_S_BFu0c()
{
  {
    init_simple_test("S_BFu0c");
    static STRUCT_IF_C S_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c, S_BFu0c)
//============================================================================


struct  S_BFu0c_BFu0c  {
  short v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0c_BFu0c) C1{ Fs Fc:0 Fc:0}



static void Test_S_BFu0c_BFu0c()
{
  {
    init_simple_test("S_BFu0c_BFu0c");
    static STRUCT_IF_C S_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu0c, S_BFu0c_BFu0c)
//============================================================================


struct  S_BFu0c_BFu0i  {
  short v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0c_BFu0i) C1{ Fs Fc:0 Fi:0}



static void Test_S_BFu0c_BFu0i()
{
  {
    init_simple_test("S_BFu0c_BFu0i");
    static STRUCT_IF_C S_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu0i, S_BFu0c_BFu0i)
//============================================================================


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



static void Test_S_BFu0c_BFu0ll()
{
  {
    init_simple_test("S_BFu0c_BFu0ll");
    static STRUCT_IF_C S_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu0ll, S_BFu0c_BFu0ll)
//============================================================================


struct  S_BFu0c_BFu0s  {
  short v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0c_BFu0s) C1{ Fs Fc:0 Fs:0}



static void Test_S_BFu0c_BFu0s()
{
  {
    init_simple_test("S_BFu0c_BFu0s");
    static STRUCT_IF_C S_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu0s, S_BFu0c_BFu0s)
//============================================================================


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



static void Test_S_BFu0c_BFu15i()
{
  {
    init_simple_test("S_BFu0c_BFu15i");
    static STRUCT_IF_C S_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu15i, S_BFu0c_BFu15i)
//============================================================================


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



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


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



static void Test_S_BFu0c_BFu15s()
{
  {
    init_simple_test("S_BFu0c_BFu15s");
    static STRUCT_IF_C S_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu15s, S_BFu0c_BFu15s)
//============================================================================


struct  S_BFu0c_BFu16i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 S_BFu0c_BFu16i) C1{ Fs Fc:0 Fi:16}



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


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



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


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



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


struct  S_BFu0c_BFu17i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 S_BFu0c_BFu17i) C1{ Fs Fc:0 Fi:17}



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


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



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


struct  S_BFu0c_BFu1c  {
  short v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0c_BFu1c) C1{ Fs Fc:0 Fc:1}



static void Test_S_BFu0c_BFu1c()
{
  {
    init_simple_test("S_BFu0c_BFu1c");
    static STRUCT_IF_C S_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu1c, S_BFu0c_BFu1c)
//============================================================================


struct  S_BFu0c_BFu1i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0c_BFu1i) C1{ Fs Fc:0 Fi:1}



static void Test_S_BFu0c_BFu1i()
{
  {
    init_simple_test("S_BFu0c_BFu1i");
    static STRUCT_IF_C S_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu1i, S_BFu0c_BFu1i)
//============================================================================


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



static void Test_S_BFu0c_BFu1ll()
{
  {
    init_simple_test("S_BFu0c_BFu1ll");
    static STRUCT_IF_C S_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu1ll, S_BFu0c_BFu1ll)
//============================================================================


struct  S_BFu0c_BFu1s  {
  short v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0c_BFu1s) C1{ Fs Fc:0 Fs:1}



static void Test_S_BFu0c_BFu1s()
{
  {
    init_simple_test("S_BFu0c_BFu1s");
    static STRUCT_IF_C S_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_BFu1s, S_BFu0c_BFu1s)
//============================================================================


struct  S_BFu0c_BFu31i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 S_BFu0c_BFu31i) C1{ Fs Fc:0 Fi:31}



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


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



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


struct  S_BFu0c_BFu32i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 S_BFu0c_BFu32i) C1{ Fs Fc:0 Fi:32}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu0c_BFu8i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 S_BFu0c_BFu8i) C1{ Fs Fc:0 Fi:8}



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


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



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


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



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


struct  S_BFu0c_BFu9i  {
  short v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 S_BFu0c_BFu9i) C1{ Fs Fc:0 Fi:9}



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


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



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


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



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


struct  S_BFu0c_C  {
  short v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 S_BFu0c_C) C1{ Fs Fc:0 Fc}



static void Test_S_BFu0c_C()
{
  {
    init_simple_test("S_BFu0c_C");
    static STRUCT_IF_C S_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_C)");
    check_field_offset(lv, v1, 0, "S_BFu0c_C.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_C, S_BFu0c_C)
//============================================================================


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



static void Test_S_BFu0c_D()
{
  {
    init_simple_test("S_BFu0c_D");
    static STRUCT_IF_C S_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_D)");
    check_field_offset(lv, v1, 0, "S_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_D, S_BFu0c_D)
//============================================================================


struct  S_BFu0c_F  {
  short v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 S_BFu0c_F) C1{ Fs Fc:0 Fi}



static void Test_S_BFu0c_F()
{
  {
    init_simple_test("S_BFu0c_F");
    static STRUCT_IF_C S_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_F)");
    check_field_offset(lv, v1, 0, "S_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "S_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_F, S_BFu0c_F)
//============================================================================


struct  S_BFu0c_I  {
  short v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 S_BFu0c_I) C1{ Fs Fc:0 Fi}



static void Test_S_BFu0c_I()
{
  {
    init_simple_test("S_BFu0c_I");
    static STRUCT_IF_C S_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_I)");
    check_field_offset(lv, v1, 0, "S_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "S_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_I, S_BFu0c_I)
//============================================================================


struct  S_BFu0c_Ip  {
  short v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 S_BFu0c_Ip) C1{ Fs Fc:0 Fp}



static void Test_S_BFu0c_Ip()
{
  {
    init_simple_test("S_BFu0c_Ip");
    static STRUCT_IF_C S_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_Ip, S_BFu0c_Ip)
//============================================================================


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



static void Test_S_BFu0c_L()
{
  {
    init_simple_test("S_BFu0c_L");
    static STRUCT_IF_C S_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_L)");
    check_field_offset(lv, v1, 0, "S_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_L, S_BFu0c_L)
//============================================================================


struct  S_BFu0c_S  {
  short v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 S_BFu0c_S) C1{ Fs Fc:0 Fs}



static void Test_S_BFu0c_S()
{
  {
    init_simple_test("S_BFu0c_S");
    static STRUCT_IF_C S_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_S)");
    check_field_offset(lv, v1, 0, "S_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_S, S_BFu0c_S)
//============================================================================


struct  S_BFu0c_Uc  {
  short v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0c_Uc) C1{ Fs Fc:0 Fc}



static void Test_S_BFu0c_Uc()
{
  {
    init_simple_test("S_BFu0c_Uc");
    static STRUCT_IF_C S_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_Uc, S_BFu0c_Uc)
//============================================================================


struct  S_BFu0c_Ui  {
  short v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0c_Ui) C1{ Fs Fc:0 Fi}



static void Test_S_BFu0c_Ui()
{
  {
    init_simple_test("S_BFu0c_Ui");
    static STRUCT_IF_C S_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "S_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_Ui, S_BFu0c_Ui)
//============================================================================


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



static void Test_S_BFu0c_Ul()
{
  {
    init_simple_test("S_BFu0c_Ul");
    static STRUCT_IF_C S_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_Ul, S_BFu0c_Ul)
//============================================================================


struct  S_BFu0c_Us  {
  short v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0c_Us) C1{ Fs Fc:0 Fs}



static void Test_S_BFu0c_Us()
{
  {
    init_simple_test("S_BFu0c_Us");
    static STRUCT_IF_C S_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "S_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_Us, S_BFu0c_Us)
//============================================================================


struct  S_BFu0c_Vp  {
  short v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 S_BFu0c_Vp) C1{ Fs Fc:0 Fp}



static void Test_S_BFu0c_Vp()
{
  {
    init_simple_test("S_BFu0c_Vp");
    static STRUCT_IF_C S_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0c_Vp, S_BFu0c_Vp)
//============================================================================


struct  S_BFu0i  {
  short v1;
  unsigned int  :0;
};
//SIG(1 S_BFu0i) C1{ Fs Fi:0}



static void Test_S_BFu0i()
{
  {
    init_simple_test("S_BFu0i");
    static STRUCT_IF_C S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i, S_BFu0i)
//============================================================================


struct  S_BFu0i_BFu0c  {
  short v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0i_BFu0c) C1{ Fs Fi:0 Fc:0}



static void Test_S_BFu0i_BFu0c()
{
  {
    init_simple_test("S_BFu0i_BFu0c");
    static STRUCT_IF_C S_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu0c, S_BFu0i_BFu0c)
//============================================================================


struct  S_BFu0i_BFu0i  {
  short v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0i_BFu0i) C1{ Fs Fi:0 Fi:0}



static void Test_S_BFu0i_BFu0i()
{
  {
    init_simple_test("S_BFu0i_BFu0i");
    static STRUCT_IF_C S_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu0i, S_BFu0i_BFu0i)
//============================================================================


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



static void Test_S_BFu0i_BFu0ll()
{
  {
    init_simple_test("S_BFu0i_BFu0ll");
    static STRUCT_IF_C S_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu0ll, S_BFu0i_BFu0ll)
//============================================================================


struct  S_BFu0i_BFu0s  {
  short v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0i_BFu0s) C1{ Fs Fi:0 Fs:0}



static void Test_S_BFu0i_BFu0s()
{
  {
    init_simple_test("S_BFu0i_BFu0s");
    static STRUCT_IF_C S_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu0s, S_BFu0i_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu0i_BFu1c  {
  short v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0i_BFu1c) C1{ Fs Fi:0 Fc:1}



static void Test_S_BFu0i_BFu1c()
{
  {
    init_simple_test("S_BFu0i_BFu1c");
    static STRUCT_IF_C S_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu1c, S_BFu0i_BFu1c)
//============================================================================


struct  S_BFu0i_BFu1i  {
  short v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0i_BFu1i) C1{ Fs Fi:0 Fi:1}



static void Test_S_BFu0i_BFu1i()
{
  {
    init_simple_test("S_BFu0i_BFu1i");
    static STRUCT_IF_C S_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu1i, S_BFu0i_BFu1i)
//============================================================================


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



static void Test_S_BFu0i_BFu1ll()
{
  {
    init_simple_test("S_BFu0i_BFu1ll");
    static STRUCT_IF_C S_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu1ll, S_BFu0i_BFu1ll)
//============================================================================


struct  S_BFu0i_BFu1s  {
  short v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0i_BFu1s) C1{ Fs Fi:0 Fs:1}



static void Test_S_BFu0i_BFu1s()
{
  {
    init_simple_test("S_BFu0i_BFu1s");
    static STRUCT_IF_C S_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "S_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_BFu1s, S_BFu0i_BFu1s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu0i_BFu8c  {
  short v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 S_BFu0i_BFu8c) C1{ Fs Fi:0 Fc:8}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu0i_C  {
  short v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 S_BFu0i_C) C1{ Fs Fi:0 Fc}



static void Test_S_BFu0i_C()
{
  {
    init_simple_test("S_BFu0i_C");
    static STRUCT_IF_C S_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_C)");
    check_field_offset(lv, v1, 0, "S_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_C, S_BFu0i_C)
//============================================================================


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



static void Test_S_BFu0i_D()
{
  {
    init_simple_test("S_BFu0i_D");
    static STRUCT_IF_C S_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_D)");
    check_field_offset(lv, v1, 0, "S_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_D, S_BFu0i_D)
//============================================================================


struct  S_BFu0i_F  {
  short v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 S_BFu0i_F) C1{ Fs Fi:0 Fi}



static void Test_S_BFu0i_F()
{
  {
    init_simple_test("S_BFu0i_F");
    static STRUCT_IF_C S_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_F)");
    check_field_offset(lv, v1, 0, "S_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_F, S_BFu0i_F)
//============================================================================


struct  S_BFu0i_I  {
  short v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 S_BFu0i_I) C1{ Fs Fi:0 Fi}



static void Test_S_BFu0i_I()
{
  {
    init_simple_test("S_BFu0i_I");
    static STRUCT_IF_C S_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_I)");
    check_field_offset(lv, v1, 0, "S_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_I, S_BFu0i_I)
//============================================================================


struct  S_BFu0i_Ip  {
  short v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 S_BFu0i_Ip) C1{ Fs Fi:0 Fp}



static void Test_S_BFu0i_Ip()
{
  {
    init_simple_test("S_BFu0i_Ip");
    static STRUCT_IF_C S_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_Ip, S_BFu0i_Ip)
//============================================================================


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



static void Test_S_BFu0i_L()
{
  {
    init_simple_test("S_BFu0i_L");
    static STRUCT_IF_C S_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_L)");
    check_field_offset(lv, v1, 0, "S_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_L, S_BFu0i_L)
//============================================================================


struct  S_BFu0i_S  {
  short v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 S_BFu0i_S) C1{ Fs Fi:0 Fs}



static void Test_S_BFu0i_S()
{
  {
    init_simple_test("S_BFu0i_S");
    static STRUCT_IF_C S_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_S)");
    check_field_offset(lv, v1, 0, "S_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_S, S_BFu0i_S)
//============================================================================


struct  S_BFu0i_Uc  {
  short v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0i_Uc) C1{ Fs Fi:0 Fc}



static void Test_S_BFu0i_Uc()
{
  {
    init_simple_test("S_BFu0i_Uc");
    static STRUCT_IF_C S_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_Uc, S_BFu0i_Uc)
//============================================================================


struct  S_BFu0i_Ui  {
  short v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0i_Ui) C1{ Fs Fi:0 Fi}



static void Test_S_BFu0i_Ui()
{
  {
    init_simple_test("S_BFu0i_Ui");
    static STRUCT_IF_C S_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_Ui, S_BFu0i_Ui)
//============================================================================


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



static void Test_S_BFu0i_Ul()
{
  {
    init_simple_test("S_BFu0i_Ul");
    static STRUCT_IF_C S_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_Ul, S_BFu0i_Ul)
//============================================================================


struct  S_BFu0i_Us  {
  short v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0i_Us) C1{ Fs Fi:0 Fs}



static void Test_S_BFu0i_Us()
{
  {
    init_simple_test("S_BFu0i_Us");
    static STRUCT_IF_C S_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(S_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "S_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_Us, S_BFu0i_Us)
//============================================================================


struct  S_BFu0i_Vp  {
  short v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 S_BFu0i_Vp) C1{ Fs Fi:0 Fp}



static void Test_S_BFu0i_Vp()
{
  {
    init_simple_test("S_BFu0i_Vp");
    static STRUCT_IF_C S_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0i_Vp, S_BFu0i_Vp)
//============================================================================


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



static void Test_S_BFu0ll()
{
  {
    init_simple_test("S_BFu0ll");
    static STRUCT_IF_C S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll, S_BFu0ll)
//============================================================================


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



static void Test_S_BFu0ll_BFu0c()
{
  {
    init_simple_test("S_BFu0ll_BFu0c");
    static STRUCT_IF_C S_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu0c, S_BFu0ll_BFu0c)
//============================================================================


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



static void Test_S_BFu0ll_BFu0i()
{
  {
    init_simple_test("S_BFu0ll_BFu0i");
    static STRUCT_IF_C S_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu0i, S_BFu0ll_BFu0i)
//============================================================================


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



static void Test_S_BFu0ll_BFu0ll()
{
  {
    init_simple_test("S_BFu0ll_BFu0ll");
    static STRUCT_IF_C S_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu0ll, S_BFu0ll_BFu0ll)
//============================================================================


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



static void Test_S_BFu0ll_BFu0s()
{
  {
    init_simple_test("S_BFu0ll_BFu0s");
    static STRUCT_IF_C S_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu0s, S_BFu0ll_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_S_BFu0ll_BFu1c()
{
  {
    init_simple_test("S_BFu0ll_BFu1c");
    static STRUCT_IF_C S_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu1c, S_BFu0ll_BFu1c)
//============================================================================


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



static void Test_S_BFu0ll_BFu1i()
{
  {
    init_simple_test("S_BFu0ll_BFu1i");
    static STRUCT_IF_C S_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu1i, S_BFu0ll_BFu1i)
//============================================================================


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



static void Test_S_BFu0ll_BFu1ll()
{
  {
    init_simple_test("S_BFu0ll_BFu1ll");
    static STRUCT_IF_C S_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu1ll, S_BFu0ll_BFu1ll)
//============================================================================


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



static void Test_S_BFu0ll_BFu1s()
{
  {
    init_simple_test("S_BFu0ll_BFu1s");
    static STRUCT_IF_C S_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "S_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_BFu1s, S_BFu0ll_BFu1s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_S_BFu0ll_C()
{
  {
    init_simple_test("S_BFu0ll_C");
    static STRUCT_IF_C S_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_C, S_BFu0ll_C)
//============================================================================


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



static void Test_S_BFu0ll_D()
{
  {
    init_simple_test("S_BFu0ll_D");
    static STRUCT_IF_C S_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_D, S_BFu0ll_D)
//============================================================================


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



static void Test_S_BFu0ll_F()
{
  {
    init_simple_test("S_BFu0ll_F");
    static STRUCT_IF_C S_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_F, S_BFu0ll_F)
//============================================================================


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



static void Test_S_BFu0ll_I()
{
  {
    init_simple_test("S_BFu0ll_I");
    static STRUCT_IF_C S_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_I, S_BFu0ll_I)
//============================================================================


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



static void Test_S_BFu0ll_Ip()
{
  {
    init_simple_test("S_BFu0ll_Ip");
    static STRUCT_IF_C S_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_Ip, S_BFu0ll_Ip)
//============================================================================


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



static void Test_S_BFu0ll_L()
{
  {
    init_simple_test("S_BFu0ll_L");
    static STRUCT_IF_C S_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_L, S_BFu0ll_L)
//============================================================================


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



static void Test_S_BFu0ll_S()
{
  {
    init_simple_test("S_BFu0ll_S");
    static STRUCT_IF_C S_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_S, S_BFu0ll_S)
//============================================================================


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



static void Test_S_BFu0ll_Uc()
{
  {
    init_simple_test("S_BFu0ll_Uc");
    static STRUCT_IF_C S_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_Uc, S_BFu0ll_Uc)
//============================================================================


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



static void Test_S_BFu0ll_Ui()
{
  {
    init_simple_test("S_BFu0ll_Ui");
    static STRUCT_IF_C S_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(S_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_Ui, S_BFu0ll_Ui)
//============================================================================


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



static void Test_S_BFu0ll_Ul()
{
  {
    init_simple_test("S_BFu0ll_Ul");
    static STRUCT_IF_C S_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_Ul, S_BFu0ll_Ul)
//============================================================================


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



static void Test_S_BFu0ll_Us()
{
  {
    init_simple_test("S_BFu0ll_Us");
    static STRUCT_IF_C S_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(S_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_Us, S_BFu0ll_Us)
//============================================================================


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



static void Test_S_BFu0ll_Vp()
{
  {
    init_simple_test("S_BFu0ll_Vp");
    static STRUCT_IF_C S_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0ll_Vp, S_BFu0ll_Vp)
//============================================================================


struct  S_BFu0s  {
  short v1;
  unsigned short  :0;
};
//SIG(1 S_BFu0s) C1{ Fs Fs:0}



static void Test_S_BFu0s()
{
  {
    init_simple_test("S_BFu0s");
    static STRUCT_IF_C S_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s, S_BFu0s)
//============================================================================


struct  S_BFu0s_BFu0c  {
  short v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 S_BFu0s_BFu0c) C1{ Fs Fs:0 Fc:0}



static void Test_S_BFu0s_BFu0c()
{
  {
    init_simple_test("S_BFu0s_BFu0c");
    static STRUCT_IF_C S_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu0c, S_BFu0s_BFu0c)
//============================================================================


struct  S_BFu0s_BFu0i  {
  short v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 S_BFu0s_BFu0i) C1{ Fs Fs:0 Fi:0}



static void Test_S_BFu0s_BFu0i()
{
  {
    init_simple_test("S_BFu0s_BFu0i");
    static STRUCT_IF_C S_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu0i, S_BFu0s_BFu0i)
//============================================================================


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



static void Test_S_BFu0s_BFu0ll()
{
  {
    init_simple_test("S_BFu0s_BFu0ll");
    static STRUCT_IF_C S_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu0ll, S_BFu0s_BFu0ll)
//============================================================================


struct  S_BFu0s_BFu0s  {
  short v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 S_BFu0s_BFu0s) C1{ Fs Fs:0 Fs:0}



static void Test_S_BFu0s_BFu0s()
{
  {
    init_simple_test("S_BFu0s_BFu0s");
    static STRUCT_IF_C S_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(S_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu0s, S_BFu0s_BFu0s)
//============================================================================


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



static void Test_S_BFu0s_BFu15i()
{
  {
    init_simple_test("S_BFu0s_BFu15i");
    static STRUCT_IF_C S_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu15i, S_BFu0s_BFu15i)
//============================================================================


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



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


struct  S_BFu0s_BFu15s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 S_BFu0s_BFu15s) C1{ Fs Fs:0 Fs:15}



static void Test_S_BFu0s_BFu15s()
{
  {
    init_simple_test("S_BFu0s_BFu15s");
    static STRUCT_IF_C S_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu15s, S_BFu0s_BFu15s)
//============================================================================


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



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


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



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


struct  S_BFu0s_BFu16s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 S_BFu0s_BFu16s) C1{ Fs Fs:0 Fs:16}



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


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



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


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



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


struct  S_BFu0s_BFu1c  {
  short v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 S_BFu0s_BFu1c) C1{ Fs Fs:0 Fc:1}



static void Test_S_BFu0s_BFu1c()
{
  {
    init_simple_test("S_BFu0s_BFu1c");
    static STRUCT_IF_C S_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu1c, S_BFu0s_BFu1c)
//============================================================================


struct  S_BFu0s_BFu1i  {
  short v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 S_BFu0s_BFu1i) C1{ Fs Fs:0 Fi:1}



static void Test_S_BFu0s_BFu1i()
{
  {
    init_simple_test("S_BFu0s_BFu1i");
    static STRUCT_IF_C S_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu1i, S_BFu0s_BFu1i)
//============================================================================


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



static void Test_S_BFu0s_BFu1ll()
{
  {
    init_simple_test("S_BFu0s_BFu1ll");
    static STRUCT_IF_C S_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu1ll, S_BFu0s_BFu1ll)
//============================================================================


struct  S_BFu0s_BFu1s  {
  short v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 S_BFu0s_BFu1s) C1{ Fs Fs:0 Fs:1}



static void Test_S_BFu0s_BFu1s()
{
  {
    init_simple_test("S_BFu0s_BFu1s");
    static STRUCT_IF_C S_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "S_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_BFu1s, S_BFu0s_BFu1s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu0s_C  {
  short v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 S_BFu0s_C) C1{ Fs Fs:0 Fc}



static void Test_S_BFu0s_C()
{
  {
    init_simple_test("S_BFu0s_C");
    static STRUCT_IF_C S_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_C)");
    check_field_offset(lv, v1, 0, "S_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_C, S_BFu0s_C)
//============================================================================


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



static void Test_S_BFu0s_D()
{
  {
    init_simple_test("S_BFu0s_D");
    static STRUCT_IF_C S_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_D)");
    check_field_offset(lv, v1, 0, "S_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_D, S_BFu0s_D)
//============================================================================


struct  S_BFu0s_F  {
  short v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 S_BFu0s_F) C1{ Fs Fs:0 Fi}



static void Test_S_BFu0s_F()
{
  {
    init_simple_test("S_BFu0s_F");
    static STRUCT_IF_C S_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_F)");
    check_field_offset(lv, v1, 0, "S_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "S_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_F, S_BFu0s_F)
//============================================================================


struct  S_BFu0s_I  {
  short v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 S_BFu0s_I) C1{ Fs Fs:0 Fi}



static void Test_S_BFu0s_I()
{
  {
    init_simple_test("S_BFu0s_I");
    static STRUCT_IF_C S_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_I)");
    check_field_offset(lv, v1, 0, "S_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "S_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_I, S_BFu0s_I)
//============================================================================


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



static void Test_S_BFu0s_Ip()
{
  {
    init_simple_test("S_BFu0s_Ip");
    static STRUCT_IF_C S_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_Ip, S_BFu0s_Ip)
//============================================================================


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



static void Test_S_BFu0s_L()
{
  {
    init_simple_test("S_BFu0s_L");
    static STRUCT_IF_C S_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_L)");
    check_field_offset(lv, v1, 0, "S_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_L, S_BFu0s_L)
//============================================================================


struct  S_BFu0s_S  {
  short v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 S_BFu0s_S) C1{ Fs Fs:0 Fs}



static void Test_S_BFu0s_S()
{
  {
    init_simple_test("S_BFu0s_S");
    static STRUCT_IF_C S_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_S)");
    check_field_offset(lv, v1, 0, "S_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_S, S_BFu0s_S)
//============================================================================


struct  S_BFu0s_Uc  {
  short v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 S_BFu0s_Uc) C1{ Fs Fs:0 Fc}



static void Test_S_BFu0s_Uc()
{
  {
    init_simple_test("S_BFu0s_Uc");
    static STRUCT_IF_C S_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_Uc, S_BFu0s_Uc)
//============================================================================


struct  S_BFu0s_Ui  {
  short v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 S_BFu0s_Ui) C1{ Fs Fs:0 Fi}



static void Test_S_BFu0s_Ui()
{
  {
    init_simple_test("S_BFu0s_Ui");
    static STRUCT_IF_C S_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(S_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "S_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_Ui, S_BFu0s_Ui)
//============================================================================


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



static void Test_S_BFu0s_Ul()
{
  {
    init_simple_test("S_BFu0s_Ul");
    static STRUCT_IF_C S_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_Ul, S_BFu0s_Ul)
//============================================================================


struct  S_BFu0s_Us  {
  short v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 S_BFu0s_Us) C1{ Fs Fs:0 Fs}



static void Test_S_BFu0s_Us()
{
  {
    init_simple_test("S_BFu0s_Us");
    static STRUCT_IF_C S_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "S_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_Us, S_BFu0s_Us)
//============================================================================


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



static void Test_S_BFu0s_Vp()
{
  {
    init_simple_test("S_BFu0s_Vp");
    static STRUCT_IF_C S_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "S_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu0s_Vp, S_BFu0s_Vp)
//============================================================================


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



static void Test_S_BFu15i_BFu0c()
{
  {
    init_simple_test("S_BFu15i_BFu0c");
    static STRUCT_IF_C S_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu15i_BFu0c, S_BFu15i_BFu0c)
//============================================================================


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



static void Test_S_BFu15i_BFu0i()
{
  {
    init_simple_test("S_BFu15i_BFu0i");
    static STRUCT_IF_C S_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu15i_BFu0i, S_BFu15i_BFu0i)
//============================================================================


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



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


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



static void Test_S_BFu15i_BFu0s()
{
  {
    init_simple_test("S_BFu15i_BFu0s");
    static STRUCT_IF_C S_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu15i_BFu0s, S_BFu15i_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_S_BFu15s_BFu0c()
{
  {
    init_simple_test("S_BFu15s_BFu0c");
    static STRUCT_IF_C S_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu15s_BFu0c, S_BFu15s_BFu0c)
//============================================================================


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



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


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



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


struct  S_BFu15s_BFu0s  {
  short v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 S_BFu15s_BFu0s) C1{ Fs Fs:15 Fs:0}



static void Test_S_BFu15s_BFu0s()
{
  {
    init_simple_test("S_BFu15s_BFu0s");
    static STRUCT_IF_C S_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "S_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "S_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu15s_BFu0s, S_BFu15s_BFu0s)
//============================================================================


struct  S_BFu16i_BFu0c  {
  short v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 S_BFu16i_BFu0c) C1{ Fs Fi:16 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu16s_BFu0s  {
  short v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 S_BFu16s_BFu0s) C1{ Fs Fs:16 Fs:0}



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


struct  S_BFu17i_BFu0c  {
  short v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 S_BFu17i_BFu0c) C1{ Fs Fi:17 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu1c_BFu0c  {
  short v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1c_BFu0c) C1{ Fs Fc:1 Fc:0}



static void Test_S_BFu1c_BFu0c()
{
  {
    init_simple_test("S_BFu1c_BFu0c");
    static STRUCT_IF_C S_BFu1c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1c_BFu0c, S_BFu1c_BFu0c)
//============================================================================


struct  S_BFu1c_BFu0i  {
  short v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1c_BFu0i) C1{ Fs Fc:1 Fi:0}



static void Test_S_BFu1c_BFu0i()
{
  {
    init_simple_test("S_BFu1c_BFu0i");
    static STRUCT_IF_C S_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1c_BFu0i, S_BFu1c_BFu0i)
//============================================================================


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



static void Test_S_BFu1c_BFu0ll()
{
  {
    init_simple_test("S_BFu1c_BFu0ll");
    static STRUCT_IF_C S_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1c_BFu0ll, S_BFu1c_BFu0ll)
//============================================================================


struct  S_BFu1c_BFu0s  {
  short v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1c_BFu0s) C1{ Fs Fc:1 Fs:0}



static void Test_S_BFu1c_BFu0s()
{
  {
    init_simple_test("S_BFu1c_BFu0s");
    static STRUCT_IF_C S_BFu1c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1c_BFu0s, S_BFu1c_BFu0s)
//============================================================================


struct  S_BFu1i_BFu0c  {
  short v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1i_BFu0c) C1{ Fs Fi:1 Fc:0}



static void Test_S_BFu1i_BFu0c()
{
  {
    init_simple_test("S_BFu1i_BFu0c");
    static STRUCT_IF_C S_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1i_BFu0c, S_BFu1i_BFu0c)
//============================================================================


struct  S_BFu1i_BFu0i  {
  short v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1i_BFu0i) C1{ Fs Fi:1 Fi:0}



static void Test_S_BFu1i_BFu0i()
{
  {
    init_simple_test("S_BFu1i_BFu0i");
    static STRUCT_IF_C S_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1i_BFu0i, S_BFu1i_BFu0i)
//============================================================================


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



static void Test_S_BFu1i_BFu0ll()
{
  {
    init_simple_test("S_BFu1i_BFu0ll");
    static STRUCT_IF_C S_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1i_BFu0ll, S_BFu1i_BFu0ll)
//============================================================================


struct  S_BFu1i_BFu0s  {
  short v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1i_BFu0s) C1{ Fs Fi:1 Fs:0}



static void Test_S_BFu1i_BFu0s()
{
  {
    init_simple_test("S_BFu1i_BFu0s");
    static STRUCT_IF_C S_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1i_BFu0s, S_BFu1i_BFu0s)
//============================================================================


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



static void Test_S_BFu1ll_BFu0c()
{
  {
    init_simple_test("S_BFu1ll_BFu0c");
    static STRUCT_IF_C S_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1ll_BFu0c, S_BFu1ll_BFu0c)
//============================================================================


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



static void Test_S_BFu1ll_BFu0i()
{
  {
    init_simple_test("S_BFu1ll_BFu0i");
    static STRUCT_IF_C S_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1ll_BFu0i, S_BFu1ll_BFu0i)
//============================================================================


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



static void Test_S_BFu1ll_BFu0ll()
{
  {
    init_simple_test("S_BFu1ll_BFu0ll");
    static STRUCT_IF_C S_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1ll_BFu0ll, S_BFu1ll_BFu0ll)
//============================================================================


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



static void Test_S_BFu1ll_BFu0s()
{
  {
    init_simple_test("S_BFu1ll_BFu0s");
    static STRUCT_IF_C S_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1ll_BFu0s, S_BFu1ll_BFu0s)
//============================================================================


struct  S_BFu1s_BFu0c  {
  short v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 S_BFu1s_BFu0c) C1{ Fs Fs:1 Fc:0}



static void Test_S_BFu1s_BFu0c()
{
  {
    init_simple_test("S_BFu1s_BFu0c");
    static STRUCT_IF_C S_BFu1s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1s_BFu0c, S_BFu1s_BFu0c)
//============================================================================


struct  S_BFu1s_BFu0i  {
  short v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 S_BFu1s_BFu0i) C1{ Fs Fs:1 Fi:0}



static void Test_S_BFu1s_BFu0i()
{
  {
    init_simple_test("S_BFu1s_BFu0i");
    static STRUCT_IF_C S_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1s_BFu0i, S_BFu1s_BFu0i)
//============================================================================


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



static void Test_S_BFu1s_BFu0ll()
{
  {
    init_simple_test("S_BFu1s_BFu0ll");
    static STRUCT_IF_C S_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1s_BFu0ll, S_BFu1s_BFu0ll)
//============================================================================


struct  S_BFu1s_BFu0s  {
  short v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 S_BFu1s_BFu0s) C1{ Fs Fs:1 Fs:0}



static void Test_S_BFu1s_BFu0s()
{
  {
    init_simple_test("S_BFu1s_BFu0s");
    static STRUCT_IF_C S_BFu1s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "S_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "S_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_S_BFu1s_BFu0s, S_BFu1s_BFu0s)
//============================================================================


struct  S_BFu31i_BFu0c  {
  short v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 S_BFu31i_BFu0c) C1{ Fs Fi:31 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu32i_BFu0c  {
  short v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 S_BFu32i_BFu0c) C1{ Fs Fi:32 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu8c_BFu0i  {
  short v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 S_BFu8c_BFu0i) C1{ Fs Fc:8 Fi:0}



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


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



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


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



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


struct  S_BFu8i_BFu0c  {
  short v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 S_BFu8i_BFu0c) C1{ Fs Fi:8 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_BFu9i_BFu0c  {
  short v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 S_BFu9i_BFu0c) C1{ Fs Fi:9 Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  S_C_BFu0c  {
  short v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 S_C_BFu0c) C1{ Fs Fc Fc:0}



static void Test_S_C_BFu0c()
{
  {
    init_simple_test("S_C_BFu0c");
    static STRUCT_IF_C S_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_C_BFu0c)");
    check_field_offset(lv, v1, 0, "S_C_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_C_BFu0c, S_C_BFu0c)
//============================================================================


struct  S_C_BFu0i  {
  short v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 S_C_BFu0i) C1{ Fs Fc Fi:0}



static void Test_S_C_BFu0i()
{
  {
    init_simple_test("S_C_BFu0i");
    static STRUCT_IF_C S_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_C_BFu0i)");
    check_field_offset(lv, v1, 0, "S_C_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_C_BFu0i, S_C_BFu0i)
//============================================================================


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



static void Test_S_C_BFu0ll()
{
  {
    init_simple_test("S_C_BFu0ll");
    static STRUCT_IF_C S_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_C_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_C_BFu0ll, S_C_BFu0ll)
//============================================================================


struct  S_C_BFu0s  {
  short v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 S_C_BFu0s) C1{ Fs Fc Fs:0}



static void Test_S_C_BFu0s()
{
  {
    init_simple_test("S_C_BFu0s");
    static STRUCT_IF_C S_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_C_BFu0s)");
    check_field_offset(lv, v1, 0, "S_C_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_C_BFu0s, S_C_BFu0s)
//============================================================================


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



static void Test_S_D_BFu0c()
{
  {
    init_simple_test("S_D_BFu0c");
    static STRUCT_IF_C S_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0c)");
    check_field_offset(lv, v1, 0, "S_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_D_BFu0c, S_D_BFu0c)
//============================================================================


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



static void Test_S_D_BFu0i()
{
  {
    init_simple_test("S_D_BFu0i");
    static STRUCT_IF_C S_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0i)");
    check_field_offset(lv, v1, 0, "S_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_D_BFu0i, S_D_BFu0i)
//============================================================================


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



static void Test_S_D_BFu0ll()
{
  {
    init_simple_test("S_D_BFu0ll");
    static STRUCT_IF_C S_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_D_BFu0ll, S_D_BFu0ll)
//============================================================================


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



static void Test_S_D_BFu0s()
{
  {
    init_simple_test("S_D_BFu0s");
    static STRUCT_IF_C S_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_D_BFu0s)");
    check_field_offset(lv, v1, 0, "S_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_D_BFu0s, S_D_BFu0s)
//============================================================================


struct  S_F_BFu0c  {
  short v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 S_F_BFu0c) C1{ Fs Fi Fc:0}



static void Test_S_F_BFu0c()
{
  {
    init_simple_test("S_F_BFu0c");
    static STRUCT_IF_C S_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_F_BFu0c)");
    check_field_offset(lv, v1, 0, "S_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_F_BFu0c, S_F_BFu0c)
//============================================================================


struct  S_F_BFu0i  {
  short v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 S_F_BFu0i) C1{ Fs Fi Fi:0}



static void Test_S_F_BFu0i()
{
  {
    init_simple_test("S_F_BFu0i");
    static STRUCT_IF_C S_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_F_BFu0i)");
    check_field_offset(lv, v1, 0, "S_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_F_BFu0i, S_F_BFu0i)
//============================================================================


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



static void Test_S_F_BFu0ll()
{
  {
    init_simple_test("S_F_BFu0ll");
    static STRUCT_IF_C S_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_F_BFu0ll, S_F_BFu0ll)
//============================================================================


struct  S_F_BFu0s  {
  short v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 S_F_BFu0s) C1{ Fs Fi Fs:0}



static void Test_S_F_BFu0s()
{
  {
    init_simple_test("S_F_BFu0s");
    static STRUCT_IF_C S_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_F_BFu0s)");
    check_field_offset(lv, v1, 0, "S_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "S_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_F_BFu0s, S_F_BFu0s)
//============================================================================


struct  S_I_BFu0c  {
  short v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 S_I_BFu0c) C1{ Fs Fi Fc:0}



static void Test_S_I_BFu0c()
{
  {
    init_simple_test("S_I_BFu0c");
    static STRUCT_IF_C S_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_I_BFu0c)");
    check_field_offset(lv, v1, 0, "S_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_I_BFu0c, S_I_BFu0c)
//============================================================================


struct  S_I_BFu0i  {
  short v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 S_I_BFu0i) C1{ Fs Fi Fi:0}



static void Test_S_I_BFu0i()
{
  {
    init_simple_test("S_I_BFu0i");
    static STRUCT_IF_C S_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_I_BFu0i)");
    check_field_offset(lv, v1, 0, "S_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_I_BFu0i, S_I_BFu0i)
//============================================================================


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



static void Test_S_I_BFu0ll()
{
  {
    init_simple_test("S_I_BFu0ll");
    static STRUCT_IF_C S_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_I_BFu0ll, S_I_BFu0ll)
//============================================================================


struct  S_I_BFu0s  {
  short v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 S_I_BFu0s) C1{ Fs Fi Fs:0}



static void Test_S_I_BFu0s()
{
  {
    init_simple_test("S_I_BFu0s");
    static STRUCT_IF_C S_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_I_BFu0s)");
    check_field_offset(lv, v1, 0, "S_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "S_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_I_BFu0s, S_I_BFu0s)
//============================================================================


struct  S_Ip_BFu0c  {
  short v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 S_Ip_BFu0c) C1{ Fs Fp Fc:0}



static void Test_S_Ip_BFu0c()
{
  {
    init_simple_test("S_Ip_BFu0c");
    static STRUCT_IF_C S_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ip_BFu0c, S_Ip_BFu0c)
//============================================================================


struct  S_Ip_BFu0i  {
  short v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 S_Ip_BFu0i) C1{ Fs Fp Fi:0}



static void Test_S_Ip_BFu0i()
{
  {
    init_simple_test("S_Ip_BFu0i");
    static STRUCT_IF_C S_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ip_BFu0i, S_Ip_BFu0i)
//============================================================================


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



static void Test_S_Ip_BFu0ll()
{
  {
    init_simple_test("S_Ip_BFu0ll");
    static STRUCT_IF_C S_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ip_BFu0ll, S_Ip_BFu0ll)
//============================================================================


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



static void Test_S_Ip_BFu0s()
{
  {
    init_simple_test("S_Ip_BFu0s");
    static STRUCT_IF_C S_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ip_BFu0s, S_Ip_BFu0s)
//============================================================================


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



static void Test_S_L_BFu0c()
{
  {
    init_simple_test("S_L_BFu0c");
    static STRUCT_IF_C S_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0c)");
    check_field_offset(lv, v1, 0, "S_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_L_BFu0c, S_L_BFu0c)
//============================================================================


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



static void Test_S_L_BFu0i()
{
  {
    init_simple_test("S_L_BFu0i");
    static STRUCT_IF_C S_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0i)");
    check_field_offset(lv, v1, 0, "S_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_L_BFu0i, S_L_BFu0i)
//============================================================================


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



static void Test_S_L_BFu0ll()
{
  {
    init_simple_test("S_L_BFu0ll");
    static STRUCT_IF_C S_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_L_BFu0ll, S_L_BFu0ll)
//============================================================================


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



static void Test_S_L_BFu0s()
{
  {
    init_simple_test("S_L_BFu0s");
    static STRUCT_IF_C S_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_L_BFu0s)");
    check_field_offset(lv, v1, 0, "S_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_L_BFu0s, S_L_BFu0s)
//============================================================================


struct  S_S_BFu0c  {
  short v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 S_S_BFu0c) C1{ Fs[2] Fc:0}



static void Test_S_S_BFu0c()
{
  {
    init_simple_test("S_S_BFu0c");
    static STRUCT_IF_C S_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_S_BFu0c)");
    check_field_offset(lv, v1, 0, "S_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_S_BFu0c, S_S_BFu0c)
//============================================================================


struct  S_S_BFu0i  {
  short v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 S_S_BFu0i) C1{ Fs[2] Fi:0}



static void Test_S_S_BFu0i()
{
  {
    init_simple_test("S_S_BFu0i");
    static STRUCT_IF_C S_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_S_BFu0i)");
    check_field_offset(lv, v1, 0, "S_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_S_BFu0i, S_S_BFu0i)
//============================================================================


struct  S_S_BFu0ll  {
  short v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 S_S_BFu0ll) C1{ Fs[2] FL:0}



static void Test_S_S_BFu0ll()
{
  {
    init_simple_test("S_S_BFu0ll");
    static STRUCT_IF_C S_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_S_BFu0ll, S_S_BFu0ll)
//============================================================================


struct  S_S_BFu0s  {
  short v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 S_S_BFu0s) C1{ Fs[2] Fs:0}



static void Test_S_S_BFu0s()
{
  {
    init_simple_test("S_S_BFu0s");
    static STRUCT_IF_C S_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_S_BFu0s)");
    check_field_offset(lv, v1, 0, "S_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_S_BFu0s, S_S_BFu0s)
//============================================================================


struct  S_Uc_BFu0c  {
  short v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 S_Uc_BFu0c) C1{ Fs Fc Fc:0}



static void Test_S_Uc_BFu0c()
{
  {
    init_simple_test("S_Uc_BFu0c");
    static STRUCT_IF_C S_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Uc_BFu0c, S_Uc_BFu0c)
//============================================================================


struct  S_Uc_BFu0i  {
  short v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 S_Uc_BFu0i) C1{ Fs Fc Fi:0}



static void Test_S_Uc_BFu0i()
{
  {
    init_simple_test("S_Uc_BFu0i");
    static STRUCT_IF_C S_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Uc_BFu0i, S_Uc_BFu0i)
//============================================================================


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



static void Test_S_Uc_BFu0ll()
{
  {
    init_simple_test("S_Uc_BFu0ll");
    static STRUCT_IF_C S_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Uc_BFu0ll, S_Uc_BFu0ll)
//============================================================================


struct  S_Uc_BFu0s  {
  short v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 S_Uc_BFu0s) C1{ Fs Fc Fs:0}



static void Test_S_Uc_BFu0s()
{
  {
    init_simple_test("S_Uc_BFu0s");
    static STRUCT_IF_C S_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Uc_BFu0s, S_Uc_BFu0s)
//============================================================================


struct  S_Ui_BFu0c  {
  short v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 S_Ui_BFu0c) C1{ Fs Fi Fc:0}



static void Test_S_Ui_BFu0c()
{
  {
    init_simple_test("S_Ui_BFu0c");
    static STRUCT_IF_C S_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(S_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ui_BFu0c, S_Ui_BFu0c)
//============================================================================


struct  S_Ui_BFu0i  {
  short v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 S_Ui_BFu0i) C1{ Fs Fi Fi:0}



static void Test_S_Ui_BFu0i()
{
  {
    init_simple_test("S_Ui_BFu0i");
    static STRUCT_IF_C S_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(S_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ui_BFu0i, S_Ui_BFu0i)
//============================================================================


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



static void Test_S_Ui_BFu0ll()
{
  {
    init_simple_test("S_Ui_BFu0ll");
    static STRUCT_IF_C S_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(S_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ui_BFu0ll, S_Ui_BFu0ll)
//============================================================================


struct  S_Ui_BFu0s  {
  short v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 S_Ui_BFu0s) C1{ Fs Fi Fs:0}



static void Test_S_Ui_BFu0s()
{
  {
    init_simple_test("S_Ui_BFu0s");
    static STRUCT_IF_C S_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(S_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(S_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "S_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ui_BFu0s, S_Ui_BFu0s)
//============================================================================


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



static void Test_S_Ul_BFu0c()
{
  {
    init_simple_test("S_Ul_BFu0c");
    static STRUCT_IF_C S_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ul_BFu0c, S_Ul_BFu0c)
//============================================================================


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



static void Test_S_Ul_BFu0i()
{
  {
    init_simple_test("S_Ul_BFu0i");
    static STRUCT_IF_C S_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ul_BFu0i, S_Ul_BFu0i)
//============================================================================


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



static void Test_S_Ul_BFu0ll()
{
  {
    init_simple_test("S_Ul_BFu0ll");
    static STRUCT_IF_C S_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ul_BFu0ll, S_Ul_BFu0ll)
//============================================================================


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



static void Test_S_Ul_BFu0s()
{
  {
    init_simple_test("S_Ul_BFu0s");
    static STRUCT_IF_C S_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Ul_BFu0s, S_Ul_BFu0s)
//============================================================================


struct  S_Us_BFu0c  {
  short v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 S_Us_BFu0c) C1{ Fs[2] Fc:0}



static void Test_S_Us_BFu0c()
{
  {
    init_simple_test("S_Us_BFu0c");
    static STRUCT_IF_C S_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(S_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(S_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Us_BFu0c, S_Us_BFu0c)
//============================================================================


struct  S_Us_BFu0i  {
  short v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 S_Us_BFu0i) C1{ Fs[2] Fi:0}



static void Test_S_Us_BFu0i()
{
  {
    init_simple_test("S_Us_BFu0i");
    static STRUCT_IF_C S_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(S_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Us_BFu0i, S_Us_BFu0i)
//============================================================================


struct  S_Us_BFu0ll  {
  short v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 S_Us_BFu0ll) C1{ Fs[2] FL:0}



static void Test_S_Us_BFu0ll()
{
  {
    init_simple_test("S_Us_BFu0ll");
    static STRUCT_IF_C S_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(S_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Us_BFu0ll, S_Us_BFu0ll)
//============================================================================


struct  S_Us_BFu0s  {
  short v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 S_Us_BFu0s) C1{ Fs[2] Fs:0}



static void Test_S_Us_BFu0s()
{
  {
    init_simple_test("S_Us_BFu0s");
    static STRUCT_IF_C S_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(S_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(S_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "S_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Us_BFu0s, S_Us_BFu0s)
//============================================================================


struct  S_Vp_BFu0c  {
  short v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 S_Vp_BFu0c) C1{ Fs Fp Fc:0}



static void Test_S_Vp_BFu0c()
{
  {
    init_simple_test("S_Vp_BFu0c");
    static STRUCT_IF_C S_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Vp_BFu0c, S_Vp_BFu0c)
//============================================================================


struct  S_Vp_BFu0i  {
  short v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 S_Vp_BFu0i) C1{ Fs Fp Fi:0}



static void Test_S_Vp_BFu0i()
{
  {
    init_simple_test("S_Vp_BFu0i");
    static STRUCT_IF_C S_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Vp_BFu0i, S_Vp_BFu0i)
//============================================================================


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



static void Test_S_Vp_BFu0ll()
{
  {
    init_simple_test("S_Vp_BFu0ll");
    static STRUCT_IF_C S_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Vp_BFu0ll, S_Vp_BFu0ll)
//============================================================================


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



static void Test_S_Vp_BFu0s()
{
  {
    init_simple_test("S_Vp_BFu0s");
    static STRUCT_IF_C S_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "S_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "S_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_S_Vp_BFu0s, S_Vp_BFu0s)
//============================================================================


struct  Uc_BFu0c  {
  unsigned char v1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0c) C1{ Fc Fc:0}



static void Test_Uc_BFu0c()
{
  {
    init_simple_test("Uc_BFu0c");
    static STRUCT_IF_C Uc_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c, Uc_BFu0c)
//============================================================================


struct  Uc_BFu0c_BFu0c  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0c_BFu0c) C1{ Fc Fc:0 Fc:0}



static void Test_Uc_BFu0c_BFu0c()
{
  {
    init_simple_test("Uc_BFu0c_BFu0c");
    static STRUCT_IF_C Uc_BFu0c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(Uc_BFu0c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu0c, Uc_BFu0c_BFu0c)
//============================================================================


struct  Uc_BFu0c_BFu0i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0c_BFu0i) C1{ Fc Fc:0 Fi:0}



static void Test_Uc_BFu0c_BFu0i()
{
  {
    init_simple_test("Uc_BFu0c_BFu0i");
    static STRUCT_IF_C Uc_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu0i, Uc_BFu0c_BFu0i)
//============================================================================


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



static void Test_Uc_BFu0c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu0ll");
    static STRUCT_IF_C Uc_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu0ll, Uc_BFu0c_BFu0ll)
//============================================================================


struct  Uc_BFu0c_BFu0s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0c_BFu0s) C1{ Fc Fc:0 Fs:0}



static void Test_Uc_BFu0c_BFu0s()
{
  {
    init_simple_test("Uc_BFu0c_BFu0s");
    static STRUCT_IF_C Uc_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu0s, Uc_BFu0c_BFu0s)
//============================================================================


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



static void Test_Uc_BFu0c_BFu15i()
{
  {
    init_simple_test("Uc_BFu0c_BFu15i");
    static STRUCT_IF_C Uc_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu15i, Uc_BFu0c_BFu15i)
//============================================================================


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



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


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



static void Test_Uc_BFu0c_BFu15s()
{
  {
    init_simple_test("Uc_BFu0c_BFu15s");
    static STRUCT_IF_C Uc_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu15s, Uc_BFu0c_BFu15s)
//============================================================================


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



static void Test_Uc_BFu0c_BFu16i()
{
  {
    init_simple_test("Uc_BFu0c_BFu16i");
    static STRUCT_IF_C Uc_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu16i, Uc_BFu0c_BFu16i)
//============================================================================


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



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


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



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


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



static void Test_Uc_BFu0c_BFu17i()
{
  {
    init_simple_test("Uc_BFu0c_BFu17i");
    static STRUCT_IF_C Uc_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu17i, Uc_BFu0c_BFu17i)
//============================================================================


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



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


struct  Uc_BFu0c_BFu1c  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0c_BFu1c) C1{ Fc Fc:0 Fc:1}



static void Test_Uc_BFu0c_BFu1c()
{
  {
    init_simple_test("Uc_BFu0c_BFu1c");
    static STRUCT_IF_C Uc_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu1c, Uc_BFu0c_BFu1c)
//============================================================================


struct  Uc_BFu0c_BFu1i  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0c_BFu1i) C1{ Fc Fc:0 Fi:1}



static void Test_Uc_BFu0c_BFu1i()
{
  {
    init_simple_test("Uc_BFu0c_BFu1i");
    static STRUCT_IF_C Uc_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu1i, Uc_BFu0c_BFu1i)
//============================================================================


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



static void Test_Uc_BFu0c_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0c_BFu1ll");
    static STRUCT_IF_C Uc_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu1ll, Uc_BFu0c_BFu1ll)
//============================================================================


struct  Uc_BFu0c_BFu1s  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0c_BFu1s) C1{ Fc Fc:0 Fs:1}



static void Test_Uc_BFu0c_BFu1s()
{
  {
    init_simple_test("Uc_BFu0c_BFu1s");
    static STRUCT_IF_C Uc_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_BFu1s, Uc_BFu0c_BFu1s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Uc_BFu0c_C  {
  unsigned char v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Uc_BFu0c_C) C1{ Fc Fc:0 Fc}



static void Test_Uc_BFu0c_C()
{
  {
    init_simple_test("Uc_BFu0c_C");
    static STRUCT_IF_C Uc_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_C)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_C.v1");
    check_field_offset(lv, v2, 1, "Uc_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_C, Uc_BFu0c_C)
//============================================================================


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



static void Test_Uc_BFu0c_D()
{
  {
    init_simple_test("Uc_BFu0c_D");
    static STRUCT_IF_C Uc_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_D, Uc_BFu0c_D)
//============================================================================


struct  Uc_BFu0c_F  {
  unsigned char v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Uc_BFu0c_F) C1{ Fc Fc:0 Fi}



static void Test_Uc_BFu0c_F()
{
  {
    init_simple_test("Uc_BFu0c_F");
    static STRUCT_IF_C Uc_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_F, Uc_BFu0c_F)
//============================================================================


struct  Uc_BFu0c_I  {
  unsigned char v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Uc_BFu0c_I) C1{ Fc Fc:0 Fi}



static void Test_Uc_BFu0c_I()
{
  {
    init_simple_test("Uc_BFu0c_I");
    static STRUCT_IF_C Uc_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_I, Uc_BFu0c_I)
//============================================================================


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



static void Test_Uc_BFu0c_Ip()
{
  {
    init_simple_test("Uc_BFu0c_Ip");
    static STRUCT_IF_C Uc_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_Ip, Uc_BFu0c_Ip)
//============================================================================


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



static void Test_Uc_BFu0c_L()
{
  {
    init_simple_test("Uc_BFu0c_L");
    static STRUCT_IF_C Uc_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_L, Uc_BFu0c_L)
//============================================================================


struct  Uc_BFu0c_S  {
  unsigned char v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Uc_BFu0c_S) C1{ Fc Fc:0 Fs}



static void Test_Uc_BFu0c_S()
{
  {
    init_simple_test("Uc_BFu0c_S");
    static STRUCT_IF_C Uc_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_S, Uc_BFu0c_S)
//============================================================================


struct  Uc_BFu0c_Uc  {
  unsigned char v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0c_Uc) C1{ Fc Fc:0 Fc}



static void Test_Uc_BFu0c_Uc()
{
  {
    init_simple_test("Uc_BFu0c_Uc");
    static STRUCT_IF_C Uc_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 1, "Uc_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_Uc, Uc_BFu0c_Uc)
//============================================================================


struct  Uc_BFu0c_Ui  {
  unsigned char v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0c_Ui) C1{ Fc Fc:0 Fi}



static void Test_Uc_BFu0c_Ui()
{
  {
    init_simple_test("Uc_BFu0c_Ui");
    static STRUCT_IF_C Uc_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_Ui, Uc_BFu0c_Ui)
//============================================================================


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



static void Test_Uc_BFu0c_Ul()
{
  {
    init_simple_test("Uc_BFu0c_Ul");
    static STRUCT_IF_C Uc_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_Ul, Uc_BFu0c_Ul)
//============================================================================


struct  Uc_BFu0c_Us  {
  unsigned char v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0c_Us) C1{ Fc Fc:0 Fs}



static void Test_Uc_BFu0c_Us()
{
  {
    init_simple_test("Uc_BFu0c_Us");
    static STRUCT_IF_C Uc_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_Us, Uc_BFu0c_Us)
//============================================================================


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



static void Test_Uc_BFu0c_Vp()
{
  {
    init_simple_test("Uc_BFu0c_Vp");
    static STRUCT_IF_C Uc_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0c_Vp, Uc_BFu0c_Vp)
//============================================================================


struct  Uc_BFu0i  {
  unsigned char v1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0i) C1{ Fc Fi:0}



static void Test_Uc_BFu0i()
{
  {
    init_simple_test("Uc_BFu0i");
    static STRUCT_IF_C Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i, Uc_BFu0i)
//============================================================================


struct  Uc_BFu0i_BFu0c  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0i_BFu0c) C1{ Fc Fi:0 Fc:0}



static void Test_Uc_BFu0i_BFu0c()
{
  {
    init_simple_test("Uc_BFu0i_BFu0c");
    static STRUCT_IF_C Uc_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu0c, Uc_BFu0i_BFu0c)
//============================================================================


struct  Uc_BFu0i_BFu0i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0i_BFu0i) C1{ Fc Fi:0 Fi:0}



static void Test_Uc_BFu0i_BFu0i()
{
  {
    init_simple_test("Uc_BFu0i_BFu0i");
    static STRUCT_IF_C Uc_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu0i, Uc_BFu0i_BFu0i)
//============================================================================


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



static void Test_Uc_BFu0i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu0ll");
    static STRUCT_IF_C Uc_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu0ll, Uc_BFu0i_BFu0ll)
//============================================================================


struct  Uc_BFu0i_BFu0s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0i_BFu0s) C1{ Fc Fi:0 Fs:0}



static void Test_Uc_BFu0i_BFu0s()
{
  {
    init_simple_test("Uc_BFu0i_BFu0s");
    static STRUCT_IF_C Uc_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu0s, Uc_BFu0i_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


struct  Uc_BFu0i_BFu16s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Uc_BFu0i_BFu16s) C1{ Fc Fi:0 Fs:16}



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


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



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


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



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


struct  Uc_BFu0i_BFu1c  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0i_BFu1c) C1{ Fc Fi:0 Fc:1}



static void Test_Uc_BFu0i_BFu1c()
{
  {
    init_simple_test("Uc_BFu0i_BFu1c");
    static STRUCT_IF_C Uc_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu1c, Uc_BFu0i_BFu1c)
//============================================================================


struct  Uc_BFu0i_BFu1i  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0i_BFu1i) C1{ Fc Fi:0 Fi:1}



static void Test_Uc_BFu0i_BFu1i()
{
  {
    init_simple_test("Uc_BFu0i_BFu1i");
    static STRUCT_IF_C Uc_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu1i, Uc_BFu0i_BFu1i)
//============================================================================


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



static void Test_Uc_BFu0i_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0i_BFu1ll");
    static STRUCT_IF_C Uc_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu1ll, Uc_BFu0i_BFu1ll)
//============================================================================


struct  Uc_BFu0i_BFu1s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0i_BFu1s) C1{ Fc Fi:0 Fs:1}



static void Test_Uc_BFu0i_BFu1s()
{
  {
    init_simple_test("Uc_BFu0i_BFu1s");
    static STRUCT_IF_C Uc_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Uc_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_BFu1s, Uc_BFu0i_BFu1s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Uc_BFu0i_BFu8s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Uc_BFu0i_BFu8s) C1{ Fc Fi:0 Fs:8}



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


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



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


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



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


struct  Uc_BFu0i_BFu9s  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Uc_BFu0i_BFu9s) C1{ Fc Fi:0 Fs:9}



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


struct  Uc_BFu0i_C  {
  unsigned char v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Uc_BFu0i_C) C1{ Fc Fi:0 Fc}



static void Test_Uc_BFu0i_C()
{
  {
    init_simple_test("Uc_BFu0i_C");
    static STRUCT_IF_C Uc_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_C, Uc_BFu0i_C)
//============================================================================


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



static void Test_Uc_BFu0i_D()
{
  {
    init_simple_test("Uc_BFu0i_D");
    static STRUCT_IF_C Uc_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_D, Uc_BFu0i_D)
//============================================================================


struct  Uc_BFu0i_F  {
  unsigned char v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Uc_BFu0i_F) C1{ Fc Fi:0 Fi}



static void Test_Uc_BFu0i_F()
{
  {
    init_simple_test("Uc_BFu0i_F");
    static STRUCT_IF_C Uc_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_F, Uc_BFu0i_F)
//============================================================================


struct  Uc_BFu0i_I  {
  unsigned char v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Uc_BFu0i_I) C1{ Fc Fi:0 Fi}



static void Test_Uc_BFu0i_I()
{
  {
    init_simple_test("Uc_BFu0i_I");
    static STRUCT_IF_C Uc_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_I, Uc_BFu0i_I)
//============================================================================


struct  Uc_BFu0i_Ip  {
  unsigned char v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Uc_BFu0i_Ip) C1{ Fc Fi:0 Fp}



static void Test_Uc_BFu0i_Ip()
{
  {
    init_simple_test("Uc_BFu0i_Ip");
    static STRUCT_IF_C Uc_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_Ip, Uc_BFu0i_Ip)
//============================================================================


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



static void Test_Uc_BFu0i_L()
{
  {
    init_simple_test("Uc_BFu0i_L");
    static STRUCT_IF_C Uc_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_L, Uc_BFu0i_L)
//============================================================================


struct  Uc_BFu0i_S  {
  unsigned char v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Uc_BFu0i_S) C1{ Fc Fi:0 Fs}



static void Test_Uc_BFu0i_S()
{
  {
    init_simple_test("Uc_BFu0i_S");
    static STRUCT_IF_C Uc_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_S, Uc_BFu0i_S)
//============================================================================


struct  Uc_BFu0i_Uc  {
  unsigned char v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0i_Uc) C1{ Fc Fi:0 Fc}



static void Test_Uc_BFu0i_Uc()
{
  {
    init_simple_test("Uc_BFu0i_Uc");
    static STRUCT_IF_C Uc_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(Uc_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_Uc, Uc_BFu0i_Uc)
//============================================================================


struct  Uc_BFu0i_Ui  {
  unsigned char v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0i_Ui) C1{ Fc Fi:0 Fi}



static void Test_Uc_BFu0i_Ui()
{
  {
    init_simple_test("Uc_BFu0i_Ui");
    static STRUCT_IF_C Uc_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_Ui, Uc_BFu0i_Ui)
//============================================================================


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



static void Test_Uc_BFu0i_Ul()
{
  {
    init_simple_test("Uc_BFu0i_Ul");
    static STRUCT_IF_C Uc_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_Ul, Uc_BFu0i_Ul)
//============================================================================


struct  Uc_BFu0i_Us  {
  unsigned char v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0i_Us) C1{ Fc Fi:0 Fs}



static void Test_Uc_BFu0i_Us()
{
  {
    init_simple_test("Uc_BFu0i_Us");
    static STRUCT_IF_C Uc_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Uc_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_Us, Uc_BFu0i_Us)
//============================================================================


struct  Uc_BFu0i_Vp  {
  unsigned char v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Uc_BFu0i_Vp) C1{ Fc Fi:0 Fp}



static void Test_Uc_BFu0i_Vp()
{
  {
    init_simple_test("Uc_BFu0i_Vp");
    static STRUCT_IF_C Uc_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0i_Vp, Uc_BFu0i_Vp)
//============================================================================


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



static void Test_Uc_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0ll");
    static STRUCT_IF_C Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll, Uc_BFu0ll)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0c");
    static STRUCT_IF_C Uc_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu0c, Uc_BFu0ll_BFu0c)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0i");
    static STRUCT_IF_C Uc_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu0i, Uc_BFu0ll_BFu0i)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0ll");
    static STRUCT_IF_C Uc_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu0ll, Uc_BFu0ll_BFu0ll)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu0s");
    static STRUCT_IF_C Uc_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu0s, Uc_BFu0ll_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_Uc_BFu0ll_BFu1c()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1c");
    static STRUCT_IF_C Uc_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu1c, Uc_BFu0ll_BFu1c)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu1i()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1i");
    static STRUCT_IF_C Uc_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu1i, Uc_BFu0ll_BFu1i)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1ll");
    static STRUCT_IF_C Uc_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu1ll, Uc_BFu0ll_BFu1ll)
//============================================================================


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



static void Test_Uc_BFu0ll_BFu1s()
{
  {
    init_simple_test("Uc_BFu0ll_BFu1s");
    static STRUCT_IF_C Uc_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Uc_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_BFu1s, Uc_BFu0ll_BFu1s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_Uc_BFu0ll_C()
{
  {
    init_simple_test("Uc_BFu0ll_C");
    static STRUCT_IF_C Uc_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_C, Uc_BFu0ll_C)
//============================================================================


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



static void Test_Uc_BFu0ll_D()
{
  {
    init_simple_test("Uc_BFu0ll_D");
    static STRUCT_IF_C Uc_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_D, Uc_BFu0ll_D)
//============================================================================


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



static void Test_Uc_BFu0ll_F()
{
  {
    init_simple_test("Uc_BFu0ll_F");
    static STRUCT_IF_C Uc_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_F, Uc_BFu0ll_F)
//============================================================================


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



static void Test_Uc_BFu0ll_I()
{
  {
    init_simple_test("Uc_BFu0ll_I");
    static STRUCT_IF_C Uc_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_I, Uc_BFu0ll_I)
//============================================================================


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



static void Test_Uc_BFu0ll_Ip()
{
  {
    init_simple_test("Uc_BFu0ll_Ip");
    static STRUCT_IF_C Uc_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_Ip, Uc_BFu0ll_Ip)
//============================================================================


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



static void Test_Uc_BFu0ll_L()
{
  {
    init_simple_test("Uc_BFu0ll_L");
    static STRUCT_IF_C Uc_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_L, Uc_BFu0ll_L)
//============================================================================


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



static void Test_Uc_BFu0ll_S()
{
  {
    init_simple_test("Uc_BFu0ll_S");
    static STRUCT_IF_C Uc_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_S, Uc_BFu0ll_S)
//============================================================================


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



static void Test_Uc_BFu0ll_Uc()
{
  {
    init_simple_test("Uc_BFu0ll_Uc");
    static STRUCT_IF_C Uc_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(Uc_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_Uc, Uc_BFu0ll_Uc)
//============================================================================


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



static void Test_Uc_BFu0ll_Ui()
{
  {
    init_simple_test("Uc_BFu0ll_Ui");
    static STRUCT_IF_C Uc_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Uc_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_Ui, Uc_BFu0ll_Ui)
//============================================================================


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



static void Test_Uc_BFu0ll_Ul()
{
  {
    init_simple_test("Uc_BFu0ll_Ul");
    static STRUCT_IF_C Uc_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_Ul, Uc_BFu0ll_Ul)
//============================================================================


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



static void Test_Uc_BFu0ll_Us()
{
  {
    init_simple_test("Uc_BFu0ll_Us");
    static STRUCT_IF_C Uc_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Uc_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_Us, Uc_BFu0ll_Us)
//============================================================================


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



static void Test_Uc_BFu0ll_Vp()
{
  {
    init_simple_test("Uc_BFu0ll_Vp");
    static STRUCT_IF_C Uc_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0ll_Vp, Uc_BFu0ll_Vp)
//============================================================================


struct  Uc_BFu0s  {
  unsigned char v1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0s) C1{ Fc Fs:0}



static void Test_Uc_BFu0s()
{
  {
    init_simple_test("Uc_BFu0s");
    static STRUCT_IF_C Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s, Uc_BFu0s)
//============================================================================


struct  Uc_BFu0s_BFu0c  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Uc_BFu0s_BFu0c) C1{ Fc Fs:0 Fc:0}



static void Test_Uc_BFu0s_BFu0c()
{
  {
    init_simple_test("Uc_BFu0s_BFu0c");
    static STRUCT_IF_C Uc_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu0c, Uc_BFu0s_BFu0c)
//============================================================================


struct  Uc_BFu0s_BFu0i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Uc_BFu0s_BFu0i) C1{ Fc Fs:0 Fi:0}



static void Test_Uc_BFu0s_BFu0i()
{
  {
    init_simple_test("Uc_BFu0s_BFu0i");
    static STRUCT_IF_C Uc_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu0i, Uc_BFu0s_BFu0i)
//============================================================================


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



static void Test_Uc_BFu0s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu0ll");
    static STRUCT_IF_C Uc_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu0ll, Uc_BFu0s_BFu0ll)
//============================================================================


struct  Uc_BFu0s_BFu0s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Uc_BFu0s_BFu0s) C1{ Fc Fs:0 Fs:0}



static void Test_Uc_BFu0s_BFu0s()
{
  {
    init_simple_test("Uc_BFu0s_BFu0s");
    static STRUCT_IF_C Uc_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu0s, Uc_BFu0s_BFu0s)
//============================================================================


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



static void Test_Uc_BFu0s_BFu15i()
{
  {
    init_simple_test("Uc_BFu0s_BFu15i");
    static STRUCT_IF_C Uc_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu15i, Uc_BFu0s_BFu15i)
//============================================================================


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



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


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



static void Test_Uc_BFu0s_BFu15s()
{
  {
    init_simple_test("Uc_BFu0s_BFu15s");
    static STRUCT_IF_C Uc_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu15s, Uc_BFu0s_BFu15s)
//============================================================================


struct  Uc_BFu0s_BFu16i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Uc_BFu0s_BFu16i) C1{ Fc Fs:0 Fi:16}



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


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



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


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



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


struct  Uc_BFu0s_BFu17i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Uc_BFu0s_BFu17i) C1{ Fc Fs:0 Fi:17}



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


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



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


struct  Uc_BFu0s_BFu1c  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Uc_BFu0s_BFu1c) C1{ Fc Fs:0 Fc:1}



static void Test_Uc_BFu0s_BFu1c()
{
  {
    init_simple_test("Uc_BFu0s_BFu1c");
    static STRUCT_IF_C Uc_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu1c, Uc_BFu0s_BFu1c)
//============================================================================


struct  Uc_BFu0s_BFu1i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Uc_BFu0s_BFu1i) C1{ Fc Fs:0 Fi:1}



static void Test_Uc_BFu0s_BFu1i()
{
  {
    init_simple_test("Uc_BFu0s_BFu1i");
    static STRUCT_IF_C Uc_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu1i, Uc_BFu0s_BFu1i)
//============================================================================


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



static void Test_Uc_BFu0s_BFu1ll()
{
  {
    init_simple_test("Uc_BFu0s_BFu1ll");
    static STRUCT_IF_C Uc_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu1ll, Uc_BFu0s_BFu1ll)
//============================================================================


struct  Uc_BFu0s_BFu1s  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Uc_BFu0s_BFu1s) C1{ Fc Fs:0 Fs:1}



static void Test_Uc_BFu0s_BFu1s()
{
  {
    init_simple_test("Uc_BFu0s_BFu1s");
    static STRUCT_IF_C Uc_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Uc_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_BFu1s, Uc_BFu0s_BFu1s)
//============================================================================


struct  Uc_BFu0s_BFu31i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Uc_BFu0s_BFu31i) C1{ Fc Fs:0 Fi:31}



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


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



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


struct  Uc_BFu0s_BFu32i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Uc_BFu0s_BFu32i) C1{ Fc Fs:0 Fi:32}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  Uc_BFu0s_BFu8i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Uc_BFu0s_BFu8i) C1{ Fc Fs:0 Fi:8}



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


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



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


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



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


struct  Uc_BFu0s_BFu9i  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Uc_BFu0s_BFu9i) C1{ Fc Fs:0 Fi:9}



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


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



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


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



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


struct  Uc_BFu0s_C  {
  unsigned char v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Uc_BFu0s_C) C1{ Fc Fs:0 Fc}



static void Test_Uc_BFu0s_C()
{
  {
    init_simple_test("Uc_BFu0s_C");
    static STRUCT_IF_C Uc_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_C, Uc_BFu0s_C)
//============================================================================


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



static void Test_Uc_BFu0s_D()
{
  {
    init_simple_test("Uc_BFu0s_D");
    static STRUCT_IF_C Uc_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_D, Uc_BFu0s_D)
//============================================================================


struct  Uc_BFu0s_F  {
  unsigned char v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Uc_BFu0s_F) C1{ Fc Fs:0 Fi}



static void Test_Uc_BFu0s_F()
{
  {
    init_simple_test("Uc_BFu0s_F");
    static STRUCT_IF_C Uc_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_F, Uc_BFu0s_F)
//============================================================================


struct  Uc_BFu0s_I  {
  unsigned char v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Uc_BFu0s_I) C1{ Fc Fs:0 Fi}



static void Test_Uc_BFu0s_I()
{
  {
    init_simple_test("Uc_BFu0s_I");
    static STRUCT_IF_C Uc_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_I, Uc_BFu0s_I)
//============================================================================


struct  Uc_BFu0s_Ip  {
  unsigned char v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Uc_BFu0s_Ip) C1{ Fc Fs:0 Fp}



static void Test_Uc_BFu0s_Ip()
{
  {
    init_simple_test("Uc_BFu0s_Ip");
    static STRUCT_IF_C Uc_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_Ip, Uc_BFu0s_Ip)
//============================================================================


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



static void Test_Uc_BFu0s_L()
{
  {
    init_simple_test("Uc_BFu0s_L");
    static STRUCT_IF_C Uc_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_L, Uc_BFu0s_L)
//============================================================================


struct  Uc_BFu0s_S  {
  unsigned char v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Uc_BFu0s_S) C1{ Fc Fs:0 Fs}



static void Test_Uc_BFu0s_S()
{
  {
    init_simple_test("Uc_BFu0s_S");
    static STRUCT_IF_C Uc_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_S, Uc_BFu0s_S)
//============================================================================


struct  Uc_BFu0s_Uc  {
  unsigned char v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Uc_BFu0s_Uc) C1{ Fc Fs:0 Fc}



static void Test_Uc_BFu0s_Uc()
{
  {
    init_simple_test("Uc_BFu0s_Uc");
    static STRUCT_IF_C Uc_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(Uc_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_Uc, Uc_BFu0s_Uc)
//============================================================================


struct  Uc_BFu0s_Ui  {
  unsigned char v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Uc_BFu0s_Ui) C1{ Fc Fs:0 Fi}



static void Test_Uc_BFu0s_Ui()
{
  {
    init_simple_test("Uc_BFu0s_Ui");
    static STRUCT_IF_C Uc_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "Uc_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_Ui, Uc_BFu0s_Ui)
//============================================================================


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



static void Test_Uc_BFu0s_Ul()
{
  {
    init_simple_test("Uc_BFu0s_Ul");
    static STRUCT_IF_C Uc_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_Ul, Uc_BFu0s_Ul)
//============================================================================


struct  Uc_BFu0s_Us  {
  unsigned char v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Uc_BFu0s_Us) C1{ Fc Fs:0 Fs}



static void Test_Uc_BFu0s_Us()
{
  {
    init_simple_test("Uc_BFu0s_Us");
    static STRUCT_IF_C Uc_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "Uc_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_Us, Uc_BFu0s_Us)
//============================================================================


struct  Uc_BFu0s_Vp  {
  unsigned char v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Uc_BFu0s_Vp) C1{ Fc Fs:0 Fp}



static void Test_Uc_BFu0s_Vp()
{
  {
    init_simple_test("Uc_BFu0s_Vp");
    static STRUCT_IF_C Uc_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Uc_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu0s_Vp, Uc_BFu0s_Vp)
//============================================================================


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



static void Test_Uc_BFu15i_BFu0c()
{
  {
    init_simple_test("Uc_BFu15i_BFu0c");
    static STRUCT_IF_C Uc_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15i_BFu0c, Uc_BFu15i_BFu0c)
//============================================================================


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



static void Test_Uc_BFu15i_BFu0i()
{
  {
    init_simple_test("Uc_BFu15i_BFu0i");
    static STRUCT_IF_C Uc_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15i_BFu0i, Uc_BFu15i_BFu0i)
//============================================================================


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



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


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



static void Test_Uc_BFu15i_BFu0s()
{
  {
    init_simple_test("Uc_BFu15i_BFu0s");
    static STRUCT_IF_C Uc_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "Uc_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "Uc_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15i_BFu0s, Uc_BFu15i_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_Uc_BFu15s_BFu0c()
{
  {
    init_simple_test("Uc_BFu15s_BFu0c");
    static STRUCT_IF_C Uc_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15s_BFu0c, Uc_BFu15s_BFu0c)
//============================================================================


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



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


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



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


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



static void Test_Uc_BFu15s_BFu0s()
{
  {
    init_simple_test("Uc_BFu15s_BFu0s");
    static STRUCT_IF_C Uc_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Uc_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Uc_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu15s_BFu0s, Uc_BFu15s_BFu0s)
//============================================================================


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



static void Test_Uc_BFu16i_BFu0c()
{
  {
    init_simple_test("Uc_BFu16i_BFu0c");
    static STRUCT_IF_C Uc_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu16i_BFu0c, Uc_BFu16i_BFu0c)
//============================================================================


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



static void Test_Uc_BFu16i_BFu0i()
{
  {
    init_simple_test("Uc_BFu16i_BFu0i");
    static STRUCT_IF_C Uc_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu16i_BFu0i, Uc_BFu16i_BFu0i)
//============================================================================


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



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


struct  Uc_BFu16i_BFu0s  {
  unsigned char v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Uc_BFu16i_BFu0s) C1{ Fc Fi:16 Fs:0}



static void Test_Uc_BFu16i_BFu0s()
{
  {
    init_simple_test("Uc_BFu16i_BFu0s");
    static STRUCT_IF_C Uc_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "Uc_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "Uc_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu16i_BFu0s, Uc_BFu16i_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


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



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


struct  Uc_BFu16s_BFu0i  {
  unsigned char v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Uc_BFu16s_BFu0i) C1{ Fc Fs:16 Fi:0}



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


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



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


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



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


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



static void Test_Uc_BFu17i_BFu0c()
{
  {
    init_simple_test("Uc_BFu17i_BFu0c");
    static STRUCT_IF_C Uc_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu17i_BFu0c, Uc_BFu17i_BFu0c)
//============================================================================


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



static void Test_Uc_BFu17i_BFu0i()
{
  {
    init_simple_test("Uc_BFu17i_BFu0i");
    static STRUCT_IF_C Uc_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu17i_BFu0i, Uc_BFu17i_BFu0i)
//============================================================================


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



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


struct  Uc_BFu17i_BFu0s  {
  unsigned char v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Uc_BFu17i_BFu0s) C1{ Fc Fi:17 Fs:0}



static void Test_Uc_BFu17i_BFu0s()
{
  {
    init_simple_test("Uc_BFu17i_BFu0s");
    static STRUCT_IF_C Uc_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "Uc_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "Uc_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu17i_BFu0s, Uc_BFu17i_BFu0s)
//============================================================================


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



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


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



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


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



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


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



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


struct  Uc_BFu1c_BFu0c  {
  unsigned char v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1c_BFu0c) C1{ Fc Fc:1 Fc:0}



static void Test_Uc_BFu1c_BFu0c()
{
  {
    init_simple_test("Uc_BFu1c_BFu0c");
    static STRUCT_IF_C Uc_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1c_BFu0c, Uc_BFu1c_BFu0c)
//============================================================================


struct  Uc_BFu1c_BFu0i  {
  unsigned char v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1c_BFu0i) C1{ Fc Fc:1 Fi:0}



static void Test_Uc_BFu1c_BFu0i()
{
  {
    init_simple_test("Uc_BFu1c_BFu0i");
    static STRUCT_IF_C Uc_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1c_BFu0i, Uc_BFu1c_BFu0i)
//============================================================================


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



static void Test_Uc_BFu1c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1c_BFu0ll");
    static STRUCT_IF_C Uc_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1c_BFu0ll, Uc_BFu1c_BFu0ll)
//============================================================================


struct  Uc_BFu1c_BFu0s  {
  unsigned char v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1c_BFu0s) C1{ Fc Fc:1 Fs:0}



static void Test_Uc_BFu1c_BFu0s()
{
  {
    init_simple_test("Uc_BFu1c_BFu0s");
    static STRUCT_IF_C Uc_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1c_BFu0s, Uc_BFu1c_BFu0s)
//============================================================================


struct  Uc_BFu1i_BFu0c  {
  unsigned char v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1i_BFu0c) C1{ Fc Fi:1 Fc:0}



static void Test_Uc_BFu1i_BFu0c()
{
  {
    init_simple_test("Uc_BFu1i_BFu0c");
    static STRUCT_IF_C Uc_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1i_BFu0c, Uc_BFu1i_BFu0c)
//============================================================================


struct  Uc_BFu1i_BFu0i  {
  unsigned char v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1i_BFu0i) C1{ Fc Fi:1 Fi:0}



static void Test_Uc_BFu1i_BFu0i()
{
  {
    init_simple_test("Uc_BFu1i_BFu0i");
    static STRUCT_IF_C Uc_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1i_BFu0i, Uc_BFu1i_BFu0i)
//============================================================================


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



static void Test_Uc_BFu1i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1i_BFu0ll");
    static STRUCT_IF_C Uc_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1i_BFu0ll, Uc_BFu1i_BFu0ll)
//============================================================================


struct  Uc_BFu1i_BFu0s  {
  unsigned char v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1i_BFu0s) C1{ Fc Fi:1 Fs:0}



static void Test_Uc_BFu1i_BFu0s()
{
  {
    init_simple_test("Uc_BFu1i_BFu0s");
    static STRUCT_IF_C Uc_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1i_BFu0s, Uc_BFu1i_BFu0s)
//============================================================================


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



static void Test_Uc_BFu1ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0c");
    static STRUCT_IF_C Uc_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1ll_BFu0c, Uc_BFu1ll_BFu0c)
//============================================================================


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



static void Test_Uc_BFu1ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0i");
    static STRUCT_IF_C Uc_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1ll_BFu0i, Uc_BFu1ll_BFu0i)
//============================================================================


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



static void Test_Uc_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0ll");
    static STRUCT_IF_C Uc_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1ll_BFu0ll, Uc_BFu1ll_BFu0ll)
//============================================================================


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



static void Test_Uc_BFu1ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu1ll_BFu0s");
    static STRUCT_IF_C Uc_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1ll_BFu0s, Uc_BFu1ll_BFu0s)
//============================================================================


struct  Uc_BFu1s_BFu0c  {
  unsigned char v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Uc_BFu1s_BFu0c) C1{ Fc Fs:1 Fc:0}



static void Test_Uc_BFu1s_BFu0c()
{
  {
    init_simple_test("Uc_BFu1s_BFu0c");
    static STRUCT_IF_C Uc_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1s_BFu0c, Uc_BFu1s_BFu0c)
//============================================================================


struct  Uc_BFu1s_BFu0i  {
  unsigned char v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Uc_BFu1s_BFu0i) C1{ Fc Fs:1 Fi:0}



static void Test_Uc_BFu1s_BFu0i()
{
  {
    init_simple_test("Uc_BFu1s_BFu0i");
    static STRUCT_IF_C Uc_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1s_BFu0i, Uc_BFu1s_BFu0i)
//============================================================================


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



static void Test_Uc_BFu1s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu1s_BFu0ll");
    static STRUCT_IF_C Uc_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1s_BFu0ll, Uc_BFu1s_BFu0ll)
//============================================================================


struct  Uc_BFu1s_BFu0s  {
  unsigned char v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Uc_BFu1s_BFu0s) C1{ Fc Fs:1 Fs:0}



static void Test_Uc_BFu1s_BFu0s()
{
  {
    init_simple_test("Uc_BFu1s_BFu0s");
    static STRUCT_IF_C Uc_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "Uc_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu1s_BFu0s, Uc_BFu1s_BFu0s)
//============================================================================


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



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


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



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


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



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


struct  Uc_BFu31i_BFu0s  {
  unsigned char v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Uc_BFu31i_BFu0s) C1{ Fc Fi:31 Fs:0}



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


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



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


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



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


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



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


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



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


struct  Uc_BFu32i_BFu0c  {
  unsigned char v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Uc_BFu32i_BFu0c) C1{ Fc Fi:32 Fc:0}



static void Test_Uc_BFu32i_BFu0c()
{
  {
    init_simple_test("Uc_BFu32i_BFu0c");
    static STRUCT_IF_C Uc_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32i_BFu0c, Uc_BFu32i_BFu0c)
//============================================================================


struct  Uc_BFu32i_BFu0i  {
  unsigned char v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Uc_BFu32i_BFu0i) C1{ Fc Fi:32 Fi:0}



static void Test_Uc_BFu32i_BFu0i()
{
  {
    init_simple_test("Uc_BFu32i_BFu0i");
    static STRUCT_IF_C Uc_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32i_BFu0i, Uc_BFu32i_BFu0i)
//============================================================================


struct  Uc_BFu32i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Uc_BFu32i_BFu0ll) C1{ Fc Fi:32 FL:0}



static void Test_Uc_BFu32i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu32i_BFu0ll");
    static STRUCT_IF_C Uc_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32i_BFu0ll, Uc_BFu32i_BFu0ll)
//============================================================================


struct  Uc_BFu32i_BFu0s  {
  unsigned char v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Uc_BFu32i_BFu0s) C1{ Fc Fi:32 Fs:0}



static void Test_Uc_BFu32i_BFu0s()
{
  {
    init_simple_test("Uc_BFu32i_BFu0s");
    static STRUCT_IF_C Uc_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Uc_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Uc_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32i_BFu0s, Uc_BFu32i_BFu0s)
//============================================================================


struct  Uc_BFu32ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Uc_BFu32ll_BFu0c) C1{ Fc FL:32 Fc:0}



static void Test_Uc_BFu32ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0c");
    static STRUCT_IF_C Uc_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32ll_BFu0c, Uc_BFu32ll_BFu0c)
//============================================================================


struct  Uc_BFu32ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Uc_BFu32ll_BFu0i) C1{ Fc FL:32 Fi:0}



static void Test_Uc_BFu32ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0i");
    static STRUCT_IF_C Uc_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32ll_BFu0i, Uc_BFu32ll_BFu0i)
//============================================================================


struct  Uc_BFu32ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Uc_BFu32ll_BFu0ll) C1{ Fc FL:32 FL:0}



static void Test_Uc_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0ll");
    static STRUCT_IF_C Uc_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32ll_BFu0ll, Uc_BFu32ll_BFu0ll)
//============================================================================


struct  Uc_BFu32ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Uc_BFu32ll_BFu0s) C1{ Fc FL:32 Fs:0}



static void Test_Uc_BFu32ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu32ll_BFu0s");
    static STRUCT_IF_C Uc_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "Uc_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "Uc_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu32ll_BFu0s, Uc_BFu32ll_BFu0s)
//============================================================================


struct  Uc_BFu33_BFu0c  {
  unsigned char v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Uc_BFu33_BFu0c) C1{ Fc FL:33 Fc:0}



static void Test_Uc_BFu33_BFu0c()
{
  {
    init_simple_test("Uc_BFu33_BFu0c");
    static STRUCT_IF_C Uc_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu33_BFu0c, Uc_BFu33_BFu0c)
//============================================================================


struct  Uc_BFu33_BFu0i  {
  unsigned char v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Uc_BFu33_BFu0i) C1{ Fc FL:33 Fi:0}



static void Test_Uc_BFu33_BFu0i()
{
  {
    init_simple_test("Uc_BFu33_BFu0i");
    static STRUCT_IF_C Uc_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu33_BFu0i, Uc_BFu33_BFu0i)
//============================================================================


struct  Uc_BFu33_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Uc_BFu33_BFu0ll) C1{ Fc FL:33 FL:0}



static void Test_Uc_BFu33_BFu0ll()
{
  {
    init_simple_test("Uc_BFu33_BFu0ll");
    static STRUCT_IF_C Uc_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu33_BFu0ll, Uc_BFu33_BFu0ll)
//============================================================================


struct  Uc_BFu33_BFu0s  {
  unsigned char v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Uc_BFu33_BFu0s) C1{ Fc FL:33 Fs:0}



static void Test_Uc_BFu33_BFu0s()
{
  {
    init_simple_test("Uc_BFu33_BFu0s");
    static STRUCT_IF_C Uc_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "Uc_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "Uc_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu33_BFu0s, Uc_BFu33_BFu0s)
//============================================================================


struct  Uc_BFu7c_BFu0c  {
  unsigned char v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7c_BFu0c) C1{ Fc Fc:7 Fc:0}



static void Test_Uc_BFu7c_BFu0c()
{
  {
    init_simple_test("Uc_BFu7c_BFu0c");
    static STRUCT_IF_C Uc_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7c_BFu0c, Uc_BFu7c_BFu0c)
//============================================================================


struct  Uc_BFu7c_BFu0i  {
  unsigned char v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7c_BFu0i) C1{ Fc Fc:7 Fi:0}



static void Test_Uc_BFu7c_BFu0i()
{
  {
    init_simple_test("Uc_BFu7c_BFu0i");
    static STRUCT_IF_C Uc_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7c_BFu0i, Uc_BFu7c_BFu0i)
//============================================================================


struct  Uc_BFu7c_BFu0ll  {
  unsigned char v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7c_BFu0ll) C1{ Fc Fc:7 FL:0}



static void Test_Uc_BFu7c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7c_BFu0ll");
    static STRUCT_IF_C Uc_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7c_BFu0ll, Uc_BFu7c_BFu0ll)
//============================================================================


struct  Uc_BFu7c_BFu0s  {
  unsigned char v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7c_BFu0s) C1{ Fc Fc:7 Fs:0}



static void Test_Uc_BFu7c_BFu0s()
{
  {
    init_simple_test("Uc_BFu7c_BFu0s");
    static STRUCT_IF_C Uc_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7c_BFu0s, Uc_BFu7c_BFu0s)
//============================================================================


struct  Uc_BFu7i_BFu0c  {
  unsigned char v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7i_BFu0c) C1{ Fc Fi:7 Fc:0}



static void Test_Uc_BFu7i_BFu0c()
{
  {
    init_simple_test("Uc_BFu7i_BFu0c");
    static STRUCT_IF_C Uc_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7i_BFu0c, Uc_BFu7i_BFu0c)
//============================================================================


struct  Uc_BFu7i_BFu0i  {
  unsigned char v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7i_BFu0i) C1{ Fc Fi:7 Fi:0}



static void Test_Uc_BFu7i_BFu0i()
{
  {
    init_simple_test("Uc_BFu7i_BFu0i");
    static STRUCT_IF_C Uc_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7i_BFu0i, Uc_BFu7i_BFu0i)
//============================================================================


struct  Uc_BFu7i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7i_BFu0ll) C1{ Fc Fi:7 FL:0}



static void Test_Uc_BFu7i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7i_BFu0ll");
    static STRUCT_IF_C Uc_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7i_BFu0ll, Uc_BFu7i_BFu0ll)
//============================================================================


struct  Uc_BFu7i_BFu0s  {
  unsigned char v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7i_BFu0s) C1{ Fc Fi:7 Fs:0}



static void Test_Uc_BFu7i_BFu0s()
{
  {
    init_simple_test("Uc_BFu7i_BFu0s");
    static STRUCT_IF_C Uc_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7i_BFu0s, Uc_BFu7i_BFu0s)
//============================================================================


struct  Uc_BFu7ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7ll_BFu0c) C1{ Fc FL:7 Fc:0}



static void Test_Uc_BFu7ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0c");
    static STRUCT_IF_C Uc_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7ll_BFu0c, Uc_BFu7ll_BFu0c)
//============================================================================


struct  Uc_BFu7ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7ll_BFu0i) C1{ Fc FL:7 Fi:0}



static void Test_Uc_BFu7ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0i");
    static STRUCT_IF_C Uc_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7ll_BFu0i, Uc_BFu7ll_BFu0i)
//============================================================================


struct  Uc_BFu7ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7ll_BFu0ll) C1{ Fc FL:7 FL:0}



static void Test_Uc_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0ll");
    static STRUCT_IF_C Uc_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7ll_BFu0ll, Uc_BFu7ll_BFu0ll)
//============================================================================


struct  Uc_BFu7ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7ll_BFu0s) C1{ Fc FL:7 Fs:0}



static void Test_Uc_BFu7ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu7ll_BFu0s");
    static STRUCT_IF_C Uc_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7ll_BFu0s, Uc_BFu7ll_BFu0s)
//============================================================================


struct  Uc_BFu7s_BFu0c  {
  unsigned char v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Uc_BFu7s_BFu0c) C1{ Fc Fs:7 Fc:0}



static void Test_Uc_BFu7s_BFu0c()
{
  {
    init_simple_test("Uc_BFu7s_BFu0c");
    static STRUCT_IF_C Uc_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7s_BFu0c, Uc_BFu7s_BFu0c)
//============================================================================


struct  Uc_BFu7s_BFu0i  {
  unsigned char v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Uc_BFu7s_BFu0i) C1{ Fc Fs:7 Fi:0}



static void Test_Uc_BFu7s_BFu0i()
{
  {
    init_simple_test("Uc_BFu7s_BFu0i");
    static STRUCT_IF_C Uc_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7s_BFu0i, Uc_BFu7s_BFu0i)
//============================================================================


struct  Uc_BFu7s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Uc_BFu7s_BFu0ll) C1{ Fc Fs:7 FL:0}



static void Test_Uc_BFu7s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu7s_BFu0ll");
    static STRUCT_IF_C Uc_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7s_BFu0ll, Uc_BFu7s_BFu0ll)
//============================================================================


struct  Uc_BFu7s_BFu0s  {
  unsigned char v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Uc_BFu7s_BFu0s) C1{ Fc Fs:7 Fs:0}



static void Test_Uc_BFu7s_BFu0s()
{
  {
    init_simple_test("Uc_BFu7s_BFu0s");
    static STRUCT_IF_C Uc_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "Uc_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "Uc_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu7s_BFu0s, Uc_BFu7s_BFu0s)
//============================================================================


struct  Uc_BFu8c_BFu0c  {
  unsigned char v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8c_BFu0c) C1{ Fc Fc:8 Fc:0}



static void Test_Uc_BFu8c_BFu0c()
{
  {
    init_simple_test("Uc_BFu8c_BFu0c");
    static STRUCT_IF_C Uc_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8c_BFu0c, Uc_BFu8c_BFu0c)
//============================================================================


struct  Uc_BFu8c_BFu0i  {
  unsigned char v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8c_BFu0i) C1{ Fc Fc:8 Fi:0}



static void Test_Uc_BFu8c_BFu0i()
{
  {
    init_simple_test("Uc_BFu8c_BFu0i");
    static STRUCT_IF_C Uc_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8c_BFu0i, Uc_BFu8c_BFu0i)
//============================================================================


struct  Uc_BFu8c_BFu0ll  {
  unsigned char v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8c_BFu0ll) C1{ Fc Fc:8 FL:0}



static void Test_Uc_BFu8c_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8c_BFu0ll");
    static STRUCT_IF_C Uc_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8c_BFu0ll, Uc_BFu8c_BFu0ll)
//============================================================================


struct  Uc_BFu8c_BFu0s  {
  unsigned char v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8c_BFu0s) C1{ Fc Fc:8 Fs:0}



static void Test_Uc_BFu8c_BFu0s()
{
  {
    init_simple_test("Uc_BFu8c_BFu0s");
    static STRUCT_IF_C Uc_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8c_BFu0s, Uc_BFu8c_BFu0s)
//============================================================================


struct  Uc_BFu8i_BFu0c  {
  unsigned char v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8i_BFu0c) C1{ Fc Fi:8 Fc:0}



static void Test_Uc_BFu8i_BFu0c()
{
  {
    init_simple_test("Uc_BFu8i_BFu0c");
    static STRUCT_IF_C Uc_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8i_BFu0c, Uc_BFu8i_BFu0c)
//============================================================================


struct  Uc_BFu8i_BFu0i  {
  unsigned char v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8i_BFu0i) C1{ Fc Fi:8 Fi:0}



static void Test_Uc_BFu8i_BFu0i()
{
  {
    init_simple_test("Uc_BFu8i_BFu0i");
    static STRUCT_IF_C Uc_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8i_BFu0i, Uc_BFu8i_BFu0i)
//============================================================================


struct  Uc_BFu8i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8i_BFu0ll) C1{ Fc Fi:8 FL:0}



static void Test_Uc_BFu8i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8i_BFu0ll");
    static STRUCT_IF_C Uc_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8i_BFu0ll, Uc_BFu8i_BFu0ll)
//============================================================================


struct  Uc_BFu8i_BFu0s  {
  unsigned char v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8i_BFu0s) C1{ Fc Fi:8 Fs:0}



static void Test_Uc_BFu8i_BFu0s()
{
  {
    init_simple_test("Uc_BFu8i_BFu0s");
    static STRUCT_IF_C Uc_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8i_BFu0s, Uc_BFu8i_BFu0s)
//============================================================================


struct  Uc_BFu8ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8ll_BFu0c) C1{ Fc FL:8 Fc:0}



static void Test_Uc_BFu8ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0c");
    static STRUCT_IF_C Uc_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8ll_BFu0c, Uc_BFu8ll_BFu0c)
//============================================================================


struct  Uc_BFu8ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8ll_BFu0i) C1{ Fc FL:8 Fi:0}



static void Test_Uc_BFu8ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0i");
    static STRUCT_IF_C Uc_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8ll_BFu0i, Uc_BFu8ll_BFu0i)
//============================================================================


struct  Uc_BFu8ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8ll_BFu0ll) C1{ Fc FL:8 FL:0}



static void Test_Uc_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0ll");
    static STRUCT_IF_C Uc_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8ll_BFu0ll, Uc_BFu8ll_BFu0ll)
//============================================================================


struct  Uc_BFu8ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8ll_BFu0s) C1{ Fc FL:8 Fs:0}



static void Test_Uc_BFu8ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu8ll_BFu0s");
    static STRUCT_IF_C Uc_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8ll_BFu0s, Uc_BFu8ll_BFu0s)
//============================================================================


struct  Uc_BFu8s_BFu0c  {
  unsigned char v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Uc_BFu8s_BFu0c) C1{ Fc Fs:8 Fc:0}



static void Test_Uc_BFu8s_BFu0c()
{
  {
    init_simple_test("Uc_BFu8s_BFu0c");
    static STRUCT_IF_C Uc_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8s_BFu0c, Uc_BFu8s_BFu0c)
//============================================================================


struct  Uc_BFu8s_BFu0i  {
  unsigned char v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Uc_BFu8s_BFu0i) C1{ Fc Fs:8 Fi:0}



static void Test_Uc_BFu8s_BFu0i()
{
  {
    init_simple_test("Uc_BFu8s_BFu0i");
    static STRUCT_IF_C Uc_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8s_BFu0i, Uc_BFu8s_BFu0i)
//============================================================================


struct  Uc_BFu8s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Uc_BFu8s_BFu0ll) C1{ Fc Fs:8 FL:0}



static void Test_Uc_BFu8s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu8s_BFu0ll");
    static STRUCT_IF_C Uc_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8s_BFu0ll, Uc_BFu8s_BFu0ll)
//============================================================================


struct  Uc_BFu8s_BFu0s  {
  unsigned char v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Uc_BFu8s_BFu0s) C1{ Fc Fs:8 Fs:0}



static void Test_Uc_BFu8s_BFu0s()
{
  {
    init_simple_test("Uc_BFu8s_BFu0s");
    static STRUCT_IF_C Uc_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "Uc_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "Uc_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu8s_BFu0s, Uc_BFu8s_BFu0s)
//============================================================================


struct  Uc_BFu9i_BFu0c  {
  unsigned char v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Uc_BFu9i_BFu0c) C1{ Fc Fi:9 Fc:0}



static void Test_Uc_BFu9i_BFu0c()
{
  {
    init_simple_test("Uc_BFu9i_BFu0c");
    static STRUCT_IF_C Uc_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9i_BFu0c, Uc_BFu9i_BFu0c)
//============================================================================


struct  Uc_BFu9i_BFu0i  {
  unsigned char v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Uc_BFu9i_BFu0i) C1{ Fc Fi:9 Fi:0}



static void Test_Uc_BFu9i_BFu0i()
{
  {
    init_simple_test("Uc_BFu9i_BFu0i");
    static STRUCT_IF_C Uc_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9i_BFu0i, Uc_BFu9i_BFu0i)
//============================================================================


struct  Uc_BFu9i_BFu0ll  {
  unsigned char v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Uc_BFu9i_BFu0ll) C1{ Fc Fi:9 FL:0}



static void Test_Uc_BFu9i_BFu0ll()
{
  {
    init_simple_test("Uc_BFu9i_BFu0ll");
    static STRUCT_IF_C Uc_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9i_BFu0ll, Uc_BFu9i_BFu0ll)
//============================================================================


struct  Uc_BFu9i_BFu0s  {
  unsigned char v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Uc_BFu9i_BFu0s) C1{ Fc Fi:9 Fs:0}



static void Test_Uc_BFu9i_BFu0s()
{
  {
    init_simple_test("Uc_BFu9i_BFu0s");
    static STRUCT_IF_C Uc_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9i_BFu0s, Uc_BFu9i_BFu0s)
//============================================================================


struct  Uc_BFu9ll_BFu0c  {
  unsigned char v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Uc_BFu9ll_BFu0c) C1{ Fc FL:9 Fc:0}



static void Test_Uc_BFu9ll_BFu0c()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0c");
    static STRUCT_IF_C Uc_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9ll_BFu0c, Uc_BFu9ll_BFu0c)
//============================================================================


struct  Uc_BFu9ll_BFu0i  {
  unsigned char v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Uc_BFu9ll_BFu0i) C1{ Fc FL:9 Fi:0}



static void Test_Uc_BFu9ll_BFu0i()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0i");
    static STRUCT_IF_C Uc_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9ll_BFu0i, Uc_BFu9ll_BFu0i)
//============================================================================


struct  Uc_BFu9ll_BFu0ll  {
  unsigned char v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Uc_BFu9ll_BFu0ll) C1{ Fc FL:9 FL:0}



static void Test_Uc_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0ll");
    static STRUCT_IF_C Uc_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9ll_BFu0ll, Uc_BFu9ll_BFu0ll)
//============================================================================


struct  Uc_BFu9ll_BFu0s  {
  unsigned char v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Uc_BFu9ll_BFu0s) C1{ Fc FL:9 Fs:0}



static void Test_Uc_BFu9ll_BFu0s()
{
  {
    init_simple_test("Uc_BFu9ll_BFu0s");
    static STRUCT_IF_C Uc_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "Uc_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "Uc_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9ll_BFu0s, Uc_BFu9ll_BFu0s)
//============================================================================


struct  Uc_BFu9s_BFu0c  {
  unsigned char v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Uc_BFu9s_BFu0c) C1{ Fc Fs:9 Fc:0}



static void Test_Uc_BFu9s_BFu0c()
{
  {
    init_simple_test("Uc_BFu9s_BFu0c");
    static STRUCT_IF_C Uc_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9s_BFu0c, Uc_BFu9s_BFu0c)
//============================================================================


struct  Uc_BFu9s_BFu0i  {
  unsigned char v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Uc_BFu9s_BFu0i) C1{ Fc Fs:9 Fi:0}



static void Test_Uc_BFu9s_BFu0i()
{
  {
    init_simple_test("Uc_BFu9s_BFu0i");
    static STRUCT_IF_C Uc_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9s_BFu0i, Uc_BFu9s_BFu0i)
//============================================================================


struct  Uc_BFu9s_BFu0ll  {
  unsigned char v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Uc_BFu9s_BFu0ll) C1{ Fc Fs:9 FL:0}



static void Test_Uc_BFu9s_BFu0ll()
{
  {
    init_simple_test("Uc_BFu9s_BFu0ll");
    static STRUCT_IF_C Uc_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9s_BFu0ll, Uc_BFu9s_BFu0ll)
//============================================================================


struct  Uc_BFu9s_BFu0s  {
  unsigned char v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Uc_BFu9s_BFu0s) C1{ Fc Fs:9 Fs:0}



static void Test_Uc_BFu9s_BFu0s()
{
  {
    init_simple_test("Uc_BFu9s_BFu0s");
    static STRUCT_IF_C Uc_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Uc_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Uc_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_BFu9s_BFu0s, Uc_BFu9s_BFu0s)
//============================================================================


struct  Uc_C_BFu0c  {
  unsigned char v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Uc_C_BFu0c) C1{ Fc[2] Fc:0}



static void Test_Uc_C_BFu0c()
{
  {
    init_simple_test("Uc_C_BFu0c");
    static STRUCT_IF_C Uc_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0c.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_C_BFu0c, Uc_C_BFu0c)
//============================================================================


struct  Uc_C_BFu0i  {
  unsigned char v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Uc_C_BFu0i) C1{ Fc[2] Fi:0}



static void Test_Uc_C_BFu0i()
{
  {
    init_simple_test("Uc_C_BFu0i");
    static STRUCT_IF_C Uc_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0i.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_C_BFu0i, Uc_C_BFu0i)
//============================================================================


struct  Uc_C_BFu0ll  {
  unsigned char v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Uc_C_BFu0ll) C1{ Fc[2] FL:0}



static void Test_Uc_C_BFu0ll()
{
  {
    init_simple_test("Uc_C_BFu0ll");
    static STRUCT_IF_C Uc_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0ll.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_C_BFu0ll, Uc_C_BFu0ll)
//============================================================================


struct  Uc_C_BFu0s  {
  unsigned char v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Uc_C_BFu0s) C1{ Fc[2] Fs:0}



static void Test_Uc_C_BFu0s()
{
  {
    init_simple_test("Uc_C_BFu0s");
    static STRUCT_IF_C Uc_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_C_BFu0s.v1");
    check_field_offset(lv, v2, 1, "Uc_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_C_BFu0s, Uc_C_BFu0s)
//============================================================================


struct  Uc_D_BFu0c  {
  unsigned char v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Uc_D_BFu0c) C1{ Fc FL Fc:0}



static void Test_Uc_D_BFu0c()
{
  {
    init_simple_test("Uc_D_BFu0c");
    static STRUCT_IF_C Uc_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_D_BFu0c, Uc_D_BFu0c)
//============================================================================


struct  Uc_D_BFu0i  {
  unsigned char v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Uc_D_BFu0i) C1{ Fc FL Fi:0}



static void Test_Uc_D_BFu0i()
{
  {
    init_simple_test("Uc_D_BFu0i");
    static STRUCT_IF_C Uc_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_D_BFu0i, Uc_D_BFu0i)
//============================================================================


struct  Uc_D_BFu0ll  {
  unsigned char v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Uc_D_BFu0ll) C1{ Fc FL FL:0}



static void Test_Uc_D_BFu0ll()
{
  {
    init_simple_test("Uc_D_BFu0ll");
    static STRUCT_IF_C Uc_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_D_BFu0ll, Uc_D_BFu0ll)
//============================================================================


struct  Uc_D_BFu0s  {
  unsigned char v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Uc_D_BFu0s) C1{ Fc FL Fs:0}



static void Test_Uc_D_BFu0s()
{
  {
    init_simple_test("Uc_D_BFu0s");
    static STRUCT_IF_C Uc_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_D_BFu0s, Uc_D_BFu0s)
//============================================================================


struct  Uc_F_BFu0c  {
  unsigned char v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Uc_F_BFu0c) C1{ Fc Fi Fc:0}



static void Test_Uc_F_BFu0c()
{
  {
    init_simple_test("Uc_F_BFu0c");
    static STRUCT_IF_C Uc_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_F_BFu0c, Uc_F_BFu0c)
//============================================================================


struct  Uc_F_BFu0i  {
  unsigned char v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Uc_F_BFu0i) C1{ Fc Fi Fi:0}



static void Test_Uc_F_BFu0i()
{
  {
    init_simple_test("Uc_F_BFu0i");
    static STRUCT_IF_C Uc_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_F_BFu0i, Uc_F_BFu0i)
//============================================================================


struct  Uc_F_BFu0ll  {
  unsigned char v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Uc_F_BFu0ll) C1{ Fc Fi FL:0}



static void Test_Uc_F_BFu0ll()
{
  {
    init_simple_test("Uc_F_BFu0ll");
    static STRUCT_IF_C Uc_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_F_BFu0ll, Uc_F_BFu0ll)
//============================================================================


struct  Uc_F_BFu0s  {
  unsigned char v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Uc_F_BFu0s) C1{ Fc Fi Fs:0}



static void Test_Uc_F_BFu0s()
{
  {
    init_simple_test("Uc_F_BFu0s");
    static STRUCT_IF_C Uc_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Uc_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_F_BFu0s, Uc_F_BFu0s)
//============================================================================


struct  Uc_I_BFu0c  {
  unsigned char v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Uc_I_BFu0c) C1{ Fc Fi Fc:0}



static void Test_Uc_I_BFu0c()
{
  {
    init_simple_test("Uc_I_BFu0c");
    static STRUCT_IF_C Uc_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_I_BFu0c, Uc_I_BFu0c)
//============================================================================


struct  Uc_I_BFu0i  {
  unsigned char v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Uc_I_BFu0i) C1{ Fc Fi Fi:0}



static void Test_Uc_I_BFu0i()
{
  {
    init_simple_test("Uc_I_BFu0i");
    static STRUCT_IF_C Uc_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_I_BFu0i, Uc_I_BFu0i)
//============================================================================


struct  Uc_I_BFu0ll  {
  unsigned char v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Uc_I_BFu0ll) C1{ Fc Fi FL:0}



static void Test_Uc_I_BFu0ll()
{
  {
    init_simple_test("Uc_I_BFu0ll");
    static STRUCT_IF_C Uc_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_I_BFu0ll, Uc_I_BFu0ll)
//============================================================================


struct  Uc_I_BFu0s  {
  unsigned char v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Uc_I_BFu0s) C1{ Fc Fi Fs:0}



static void Test_Uc_I_BFu0s()
{
  {
    init_simple_test("Uc_I_BFu0s");
    static STRUCT_IF_C Uc_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Uc_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_I_BFu0s, Uc_I_BFu0s)
//============================================================================


struct  Uc_Ip_BFu0c  {
  unsigned char v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Uc_Ip_BFu0c) C1{ Fc Fp Fc:0}



static void Test_Uc_Ip_BFu0c()
{
  {
    init_simple_test("Uc_Ip_BFu0c");
    static STRUCT_IF_C Uc_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ip_BFu0c, Uc_Ip_BFu0c)
//============================================================================


struct  Uc_Ip_BFu0i  {
  unsigned char v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Uc_Ip_BFu0i) C1{ Fc Fp Fi:0}



static void Test_Uc_Ip_BFu0i()
{
  {
    init_simple_test("Uc_Ip_BFu0i");
    static STRUCT_IF_C Uc_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ip_BFu0i, Uc_Ip_BFu0i)
//============================================================================


struct  Uc_Ip_BFu0ll  {
  unsigned char v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Uc_Ip_BFu0ll) C1{ Fc Fp FL:0}



static void Test_Uc_Ip_BFu0ll()
{
  {
    init_simple_test("Uc_Ip_BFu0ll");
    static STRUCT_IF_C Uc_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ip_BFu0ll, Uc_Ip_BFu0ll)
//============================================================================


struct  Uc_Ip_BFu0s  {
  unsigned char v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Uc_Ip_BFu0s) C1{ Fc Fp Fs:0}



static void Test_Uc_Ip_BFu0s()
{
  {
    init_simple_test("Uc_Ip_BFu0s");
    static STRUCT_IF_C Uc_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ip_BFu0s, Uc_Ip_BFu0s)
//============================================================================


struct  Uc_L_BFu0c  {
  unsigned char v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Uc_L_BFu0c) C1{ Fc FL Fc:0}



static void Test_Uc_L_BFu0c()
{
  {
    init_simple_test("Uc_L_BFu0c");
    static STRUCT_IF_C Uc_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_L_BFu0c, Uc_L_BFu0c)
//============================================================================


struct  Uc_L_BFu0i  {
  unsigned char v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Uc_L_BFu0i) C1{ Fc FL Fi:0}



static void Test_Uc_L_BFu0i()
{
  {
    init_simple_test("Uc_L_BFu0i");
    static STRUCT_IF_C Uc_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_L_BFu0i, Uc_L_BFu0i)
//============================================================================


struct  Uc_L_BFu0ll  {
  unsigned char v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Uc_L_BFu0ll) C1{ Fc FL FL:0}



static void Test_Uc_L_BFu0ll()
{
  {
    init_simple_test("Uc_L_BFu0ll");
    static STRUCT_IF_C Uc_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_L_BFu0ll, Uc_L_BFu0ll)
//============================================================================


struct  Uc_L_BFu0s  {
  unsigned char v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Uc_L_BFu0s) C1{ Fc FL Fs:0}



static void Test_Uc_L_BFu0s()
{
  {
    init_simple_test("Uc_L_BFu0s");
    static STRUCT_IF_C Uc_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_L_BFu0s, Uc_L_BFu0s)
//============================================================================


struct  Uc_S_BFu0c  {
  unsigned char v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Uc_S_BFu0c) C1{ Fc Fs Fc:0}



static void Test_Uc_S_BFu0c()
{
  {
    init_simple_test("Uc_S_BFu0c");
    static STRUCT_IF_C Uc_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_S_BFu0c, Uc_S_BFu0c)
//============================================================================


struct  Uc_S_BFu0i  {
  unsigned char v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Uc_S_BFu0i) C1{ Fc Fs Fi:0}



static void Test_Uc_S_BFu0i()
{
  {
    init_simple_test("Uc_S_BFu0i");
    static STRUCT_IF_C Uc_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_S_BFu0i, Uc_S_BFu0i)
//============================================================================


struct  Uc_S_BFu0ll  {
  unsigned char v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Uc_S_BFu0ll) C1{ Fc Fs FL:0}



static void Test_Uc_S_BFu0ll()
{
  {
    init_simple_test("Uc_S_BFu0ll");
    static STRUCT_IF_C Uc_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_S_BFu0ll, Uc_S_BFu0ll)
//============================================================================


struct  Uc_S_BFu0s  {
  unsigned char v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Uc_S_BFu0s) C1{ Fc Fs Fs:0}



static void Test_Uc_S_BFu0s()
{
  {
    init_simple_test("Uc_S_BFu0s");
    static STRUCT_IF_C Uc_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Uc_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_S_BFu0s, Uc_S_BFu0s)
//============================================================================


struct  Uc_Uc_BFu0c  {
  unsigned char v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Uc_Uc_BFu0c) C1{ Fc[2] Fc:0}



static void Test_Uc_Uc_BFu0c()
{
  {
    init_simple_test("Uc_Uc_BFu0c");
    static STRUCT_IF_C Uc_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(Uc_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Uc_BFu0c, Uc_Uc_BFu0c)
//============================================================================


struct  Uc_Uc_BFu0i  {
  unsigned char v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Uc_Uc_BFu0i) C1{ Fc[2] Fi:0}



static void Test_Uc_Uc_BFu0i()
{
  {
    init_simple_test("Uc_Uc_BFu0i");
    static STRUCT_IF_C Uc_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Uc_BFu0i, Uc_Uc_BFu0i)
//============================================================================


struct  Uc_Uc_BFu0ll  {
  unsigned char v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Uc_Uc_BFu0ll) C1{ Fc[2] FL:0}



static void Test_Uc_Uc_BFu0ll()
{
  {
    init_simple_test("Uc_Uc_BFu0ll");
    static STRUCT_IF_C Uc_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Uc_BFu0ll, Uc_Uc_BFu0ll)
//============================================================================


struct  Uc_Uc_BFu0s  {
  unsigned char v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Uc_Uc_BFu0s) C1{ Fc[2] Fs:0}



static void Test_Uc_Uc_BFu0s()
{
  {
    init_simple_test("Uc_Uc_BFu0s");
    static STRUCT_IF_C Uc_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Uc_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(Uc_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 1, "Uc_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Uc_BFu0s, Uc_Uc_BFu0s)
//============================================================================


struct  Uc_Ui_BFu0c  {
  unsigned char v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Uc_Ui_BFu0c) C1{ Fc Fi Fc:0}



static void Test_Uc_Ui_BFu0c()
{
  {
    init_simple_test("Uc_Ui_BFu0c");
    static STRUCT_IF_C Uc_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ui_BFu0c, Uc_Ui_BFu0c)
//============================================================================


struct  Uc_Ui_BFu0i  {
  unsigned char v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Uc_Ui_BFu0i) C1{ Fc Fi Fi:0}



static void Test_Uc_Ui_BFu0i()
{
  {
    init_simple_test("Uc_Ui_BFu0i");
    static STRUCT_IF_C Uc_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ui_BFu0i, Uc_Ui_BFu0i)
//============================================================================


struct  Uc_Ui_BFu0ll  {
  unsigned char v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Uc_Ui_BFu0ll) C1{ Fc Fi FL:0}



static void Test_Uc_Ui_BFu0ll()
{
  {
    init_simple_test("Uc_Ui_BFu0ll");
    static STRUCT_IF_C Uc_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Uc_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ui_BFu0ll, Uc_Ui_BFu0ll)
//============================================================================


struct  Uc_Ui_BFu0s  {
  unsigned char v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Uc_Ui_BFu0s) C1{ Fc Fi Fs:0}



static void Test_Uc_Ui_BFu0s()
{
  {
    init_simple_test("Uc_Ui_BFu0s");
    static STRUCT_IF_C Uc_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Uc_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Uc_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Uc_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ui_BFu0s, Uc_Ui_BFu0s)
//============================================================================


struct  Uc_Ul_BFu0c  {
  unsigned char v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Uc_Ul_BFu0c) C1{ Fc FL Fc:0}



static void Test_Uc_Ul_BFu0c()
{
  {
    init_simple_test("Uc_Ul_BFu0c");
    static STRUCT_IF_C Uc_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ul_BFu0c, Uc_Ul_BFu0c)
//============================================================================


struct  Uc_Ul_BFu0i  {
  unsigned char v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Uc_Ul_BFu0i) C1{ Fc FL Fi:0}



static void Test_Uc_Ul_BFu0i()
{
  {
    init_simple_test("Uc_Ul_BFu0i");
    static STRUCT_IF_C Uc_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ul_BFu0i, Uc_Ul_BFu0i)
//============================================================================


struct  Uc_Ul_BFu0ll  {
  unsigned char v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Uc_Ul_BFu0ll) C1{ Fc FL FL:0}



static void Test_Uc_Ul_BFu0ll()
{
  {
    init_simple_test("Uc_Ul_BFu0ll");
    static STRUCT_IF_C Uc_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ul_BFu0ll, Uc_Ul_BFu0ll)
//============================================================================


struct  Uc_Ul_BFu0s  {
  unsigned char v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Uc_Ul_BFu0s) C1{ Fc FL Fs:0}



static void Test_Uc_Ul_BFu0s()
{
  {
    init_simple_test("Uc_Ul_BFu0s");
    static STRUCT_IF_C Uc_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Uc_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Ul_BFu0s, Uc_Ul_BFu0s)
//============================================================================


struct  Uc_Us_BFu0c  {
  unsigned char v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Uc_Us_BFu0c) C1{ Fc Fs Fc:0}



static void Test_Uc_Us_BFu0c()
{
  {
    init_simple_test("Uc_Us_BFu0c");
    static STRUCT_IF_C Uc_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Us_BFu0c, Uc_Us_BFu0c)
//============================================================================


struct  Uc_Us_BFu0i  {
  unsigned char v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Uc_Us_BFu0i) C1{ Fc Fs Fi:0}



static void Test_Uc_Us_BFu0i()
{
  {
    init_simple_test("Uc_Us_BFu0i");
    static STRUCT_IF_C Uc_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Us_BFu0i, Uc_Us_BFu0i)
//============================================================================


struct  Uc_Us_BFu0ll  {
  unsigned char v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Uc_Us_BFu0ll) C1{ Fc Fs FL:0}



static void Test_Uc_Us_BFu0ll()
{
  {
    init_simple_test("Uc_Us_BFu0ll");
    static STRUCT_IF_C Uc_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Uc_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Uc_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Us_BFu0ll, Uc_Us_BFu0ll)
//============================================================================


struct  Uc_Us_BFu0s  {
  unsigned char v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Uc_Us_BFu0s) C1{ Fc Fs Fs:0}



static void Test_Uc_Us_BFu0s()
{
  {
    init_simple_test("Uc_Us_BFu0s");
    static STRUCT_IF_C Uc_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Uc_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Uc_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Uc_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Us_BFu0s, Uc_Us_BFu0s)
//============================================================================


struct  Uc_Vp_BFu0c  {
  unsigned char v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Uc_Vp_BFu0c) C1{ Fc Fp Fc:0}



static void Test_Uc_Vp_BFu0c()
{
  {
    init_simple_test("Uc_Vp_BFu0c");
    static STRUCT_IF_C Uc_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Vp_BFu0c, Uc_Vp_BFu0c)
//============================================================================


struct  Uc_Vp_BFu0i  {
  unsigned char v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Uc_Vp_BFu0i) C1{ Fc Fp Fi:0}



static void Test_Uc_Vp_BFu0i()
{
  {
    init_simple_test("Uc_Vp_BFu0i");
    static STRUCT_IF_C Uc_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Vp_BFu0i, Uc_Vp_BFu0i)
//============================================================================


struct  Uc_Vp_BFu0ll  {
  unsigned char v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Uc_Vp_BFu0ll) C1{ Fc Fp FL:0}



static void Test_Uc_Vp_BFu0ll()
{
  {
    init_simple_test("Uc_Vp_BFu0ll");
    static STRUCT_IF_C Uc_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Vp_BFu0ll, Uc_Vp_BFu0ll)
//============================================================================


struct  Uc_Vp_BFu0s  {
  unsigned char v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Uc_Vp_BFu0s) C1{ Fc Fp Fs:0}



static void Test_Uc_Vp_BFu0s()
{
  {
    init_simple_test("Uc_Vp_BFu0s");
    static STRUCT_IF_C Uc_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Uc_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Uc_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Uc_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Uc_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Uc_Vp_BFu0s, Uc_Vp_BFu0s)
//============================================================================


struct  Ui_BFu0c  {
  unsigned int v1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0c) C1{ Fi Fc:0}



static void Test_Ui_BFu0c()
{
  {
    init_simple_test("Ui_BFu0c");
    static STRUCT_IF_C Ui_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c, Ui_BFu0c)
//============================================================================


struct  Ui_BFu0c_BFu0c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0c_BFu0c) C1{ Fi Fc:0 Fc:0}



static void Test_Ui_BFu0c_BFu0c()
{
  {
    init_simple_test("Ui_BFu0c_BFu0c");
    static STRUCT_IF_C Ui_BFu0c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu0c, Ui_BFu0c_BFu0c)
//============================================================================


struct  Ui_BFu0c_BFu0i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0c_BFu0i) C1{ Fi Fc:0 Fi:0}



static void Test_Ui_BFu0c_BFu0i()
{
  {
    init_simple_test("Ui_BFu0c_BFu0i");
    static STRUCT_IF_C Ui_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu0i, Ui_BFu0c_BFu0i)
//============================================================================


struct  Ui_BFu0c_BFu0ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0c_BFu0ll) C1{ Fi Fc:0 FL:0}



static void Test_Ui_BFu0c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu0ll");
    static STRUCT_IF_C Ui_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu0ll, Ui_BFu0c_BFu0ll)
//============================================================================


struct  Ui_BFu0c_BFu0s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0c_BFu0s) C1{ Fi Fc:0 Fs:0}



static void Test_Ui_BFu0c_BFu0s()
{
  {
    init_simple_test("Ui_BFu0c_BFu0s");
    static STRUCT_IF_C Ui_BFu0c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu0s, Ui_BFu0c_BFu0s)
//============================================================================


struct  Ui_BFu0c_BFu15i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0c_BFu15i) C1{ Fi Fc:0 Fi:15}



static void Test_Ui_BFu0c_BFu15i()
{
  {
    init_simple_test("Ui_BFu0c_BFu15i");
    static STRUCT_IF_C Ui_BFu0c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu15i, Ui_BFu0c_BFu15i)
//============================================================================


struct  Ui_BFu0c_BFu15ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0c_BFu15ll) C1{ Fi Fc:0 FL:15}



static void Test_Ui_BFu0c_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu15ll");
    static STRUCT_IF_C Ui_BFu0c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu15ll, Ui_BFu0c_BFu15ll)
//============================================================================


struct  Ui_BFu0c_BFu15s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0c_BFu15s) C1{ Fi Fc:0 Fs:15}



static void Test_Ui_BFu0c_BFu15s()
{
  {
    init_simple_test("Ui_BFu0c_BFu15s");
    static STRUCT_IF_C Ui_BFu0c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu15s, Ui_BFu0c_BFu15s)
//============================================================================


struct  Ui_BFu0c_BFu16i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0c_BFu16i) C1{ Fi Fc:0 Fi:16}



static void Test_Ui_BFu0c_BFu16i()
{
  {
    init_simple_test("Ui_BFu0c_BFu16i");
    static STRUCT_IF_C Ui_BFu0c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu16i, Ui_BFu0c_BFu16i)
//============================================================================


struct  Ui_BFu0c_BFu16ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0c_BFu16ll) C1{ Fi Fc:0 FL:16}



static void Test_Ui_BFu0c_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu16ll");
    static STRUCT_IF_C Ui_BFu0c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu16ll, Ui_BFu0c_BFu16ll)
//============================================================================


struct  Ui_BFu0c_BFu16s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0c_BFu16s) C1{ Fi Fc:0 Fs:16}



static void Test_Ui_BFu0c_BFu16s()
{
  {
    init_simple_test("Ui_BFu0c_BFu16s");
    static STRUCT_IF_C Ui_BFu0c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu16s, Ui_BFu0c_BFu16s)
//============================================================================


struct  Ui_BFu0c_BFu17i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0c_BFu17i) C1{ Fi Fc:0 Fi:17}



static void Test_Ui_BFu0c_BFu17i()
{
  {
    init_simple_test("Ui_BFu0c_BFu17i");
    static STRUCT_IF_C Ui_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu17i, Ui_BFu0c_BFu17i)
//============================================================================


struct  Ui_BFu0c_BFu17ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0c_BFu17ll) C1{ Fi Fc:0 FL:17}



static void Test_Ui_BFu0c_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu17ll");
    static STRUCT_IF_C Ui_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu17ll, Ui_BFu0c_BFu17ll)
//============================================================================


struct  Ui_BFu0c_BFu1c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0c_BFu1c) C1{ Fi Fc:0 Fc:1}



static void Test_Ui_BFu0c_BFu1c()
{
  {
    init_simple_test("Ui_BFu0c_BFu1c");
    static STRUCT_IF_C Ui_BFu0c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu1c, Ui_BFu0c_BFu1c)
//============================================================================


struct  Ui_BFu0c_BFu1i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0c_BFu1i) C1{ Fi Fc:0 Fi:1}



static void Test_Ui_BFu0c_BFu1i()
{
  {
    init_simple_test("Ui_BFu0c_BFu1i");
    static STRUCT_IF_C Ui_BFu0c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu1i, Ui_BFu0c_BFu1i)
//============================================================================


struct  Ui_BFu0c_BFu1ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0c_BFu1ll) C1{ Fi Fc:0 FL:1}



static void Test_Ui_BFu0c_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu1ll");
    static STRUCT_IF_C Ui_BFu0c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu1ll, Ui_BFu0c_BFu1ll)
//============================================================================


struct  Ui_BFu0c_BFu1s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0c_BFu1s) C1{ Fi Fc:0 Fs:1}



static void Test_Ui_BFu0c_BFu1s()
{
  {
    init_simple_test("Ui_BFu0c_BFu1s");
    static STRUCT_IF_C Ui_BFu0c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu1s, Ui_BFu0c_BFu1s)
//============================================================================


struct  Ui_BFu0c_BFu31i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0c_BFu31i) C1{ Fi Fc:0 Fi:31}



static void Test_Ui_BFu0c_BFu31i()
{
  {
    init_simple_test("Ui_BFu0c_BFu31i");
    static STRUCT_IF_C Ui_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu31i, Ui_BFu0c_BFu31i)
//============================================================================


struct  Ui_BFu0c_BFu31ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0c_BFu31ll) C1{ Fi Fc:0 FL:31}



static void Test_Ui_BFu0c_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu31ll");
    static STRUCT_IF_C Ui_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu31ll, Ui_BFu0c_BFu31ll)
//============================================================================


struct  Ui_BFu0c_BFu32i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0c_BFu32i) C1{ Fi Fc:0 Fi:32}



static void Test_Ui_BFu0c_BFu32i()
{
  {
    init_simple_test("Ui_BFu0c_BFu32i");
    static STRUCT_IF_C Ui_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu32i, Ui_BFu0c_BFu32i)
//============================================================================


struct  Ui_BFu0c_BFu32ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0c_BFu32ll) C1{ Fi Fc:0 FL:32}



static void Test_Ui_BFu0c_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu32ll");
    static STRUCT_IF_C Ui_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu32ll, Ui_BFu0c_BFu32ll)
//============================================================================


struct  Ui_BFu0c_BFu33  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0c_BFu33) C1{ Fi Fc:0 FL:33}



static void Test_Ui_BFu0c_BFu33()
{
  {
    init_simple_test("Ui_BFu0c_BFu33");
    static STRUCT_IF_C Ui_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu33, Ui_BFu0c_BFu33)
//============================================================================


struct  Ui_BFu0c_BFu7c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0c_BFu7c) C1{ Fi Fc:0 Fc:7}



static void Test_Ui_BFu0c_BFu7c()
{
  {
    init_simple_test("Ui_BFu0c_BFu7c");
    static STRUCT_IF_C Ui_BFu0c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu7c, Ui_BFu0c_BFu7c)
//============================================================================


struct  Ui_BFu0c_BFu7i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0c_BFu7i) C1{ Fi Fc:0 Fi:7}



static void Test_Ui_BFu0c_BFu7i()
{
  {
    init_simple_test("Ui_BFu0c_BFu7i");
    static STRUCT_IF_C Ui_BFu0c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu7i, Ui_BFu0c_BFu7i)
//============================================================================


struct  Ui_BFu0c_BFu7ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0c_BFu7ll) C1{ Fi Fc:0 FL:7}



static void Test_Ui_BFu0c_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu7ll");
    static STRUCT_IF_C Ui_BFu0c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu7ll, Ui_BFu0c_BFu7ll)
//============================================================================


struct  Ui_BFu0c_BFu7s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0c_BFu7s) C1{ Fi Fc:0 Fs:7}



static void Test_Ui_BFu0c_BFu7s()
{
  {
    init_simple_test("Ui_BFu0c_BFu7s");
    static STRUCT_IF_C Ui_BFu0c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu7s, Ui_BFu0c_BFu7s)
//============================================================================


struct  Ui_BFu0c_BFu8c  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0c_BFu8c) C1{ Fi Fc:0 Fc:8}



static void Test_Ui_BFu0c_BFu8c()
{
  {
    init_simple_test("Ui_BFu0c_BFu8c");
    static STRUCT_IF_C Ui_BFu0c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu8c, Ui_BFu0c_BFu8c)
//============================================================================


struct  Ui_BFu0c_BFu8i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0c_BFu8i) C1{ Fi Fc:0 Fi:8}



static void Test_Ui_BFu0c_BFu8i()
{
  {
    init_simple_test("Ui_BFu0c_BFu8i");
    static STRUCT_IF_C Ui_BFu0c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu8i, Ui_BFu0c_BFu8i)
//============================================================================


struct  Ui_BFu0c_BFu8ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0c_BFu8ll) C1{ Fi Fc:0 FL:8}



static void Test_Ui_BFu0c_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu8ll");
    static STRUCT_IF_C Ui_BFu0c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu8ll, Ui_BFu0c_BFu8ll)
//============================================================================


struct  Ui_BFu0c_BFu8s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0c_BFu8s) C1{ Fi Fc:0 Fs:8}



static void Test_Ui_BFu0c_BFu8s()
{
  {
    init_simple_test("Ui_BFu0c_BFu8s");
    static STRUCT_IF_C Ui_BFu0c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu8s, Ui_BFu0c_BFu8s)
//============================================================================


struct  Ui_BFu0c_BFu9i  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0c_BFu9i) C1{ Fi Fc:0 Fi:9}



static void Test_Ui_BFu0c_BFu9i()
{
  {
    init_simple_test("Ui_BFu0c_BFu9i");
    static STRUCT_IF_C Ui_BFu0c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu9i, Ui_BFu0c_BFu9i)
//============================================================================


struct  Ui_BFu0c_BFu9ll  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0c_BFu9ll) C1{ Fi Fc:0 FL:9}



static void Test_Ui_BFu0c_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0c_BFu9ll");
    static STRUCT_IF_C Ui_BFu0c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu9ll, Ui_BFu0c_BFu9ll)
//============================================================================


struct  Ui_BFu0c_BFu9s  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0c_BFu9s) C1{ Fi Fc:0 Fs:9}



static void Test_Ui_BFu0c_BFu9s()
{
  {
    init_simple_test("Ui_BFu0c_BFu9s");
    static STRUCT_IF_C Ui_BFu0c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_BFu9s, Ui_BFu0c_BFu9s)
//============================================================================


struct  Ui_BFu0c_C  {
  unsigned int v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Ui_BFu0c_C) C1{ Fi Fc:0 Fc}



static void Test_Ui_BFu0c_C()
{
  {
    init_simple_test("Ui_BFu0c_C");
    static STRUCT_IF_C Ui_BFu0c_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_C.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_C, Ui_BFu0c_C)
//============================================================================


struct  Ui_BFu0c_D  {
  unsigned int v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Ui_BFu0c_D) C1{ Fi Fc:0 FL}



static void Test_Ui_BFu0c_D()
{
  {
    init_simple_test("Ui_BFu0c_D");
    static STRUCT_IF_C Ui_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_D, Ui_BFu0c_D)
//============================================================================


struct  Ui_BFu0c_F  {
  unsigned int v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Ui_BFu0c_F) C1{ Fi Fc:0 Fi}



static void Test_Ui_BFu0c_F()
{
  {
    init_simple_test("Ui_BFu0c_F");
    static STRUCT_IF_C Ui_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_F, Ui_BFu0c_F)
//============================================================================


struct  Ui_BFu0c_I  {
  unsigned int v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Ui_BFu0c_I) C1{ Fi Fc:0 Fi}



static void Test_Ui_BFu0c_I()
{
  {
    init_simple_test("Ui_BFu0c_I");
    static STRUCT_IF_C Ui_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_I, Ui_BFu0c_I)
//============================================================================


struct  Ui_BFu0c_Ip  {
  unsigned int v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Ui_BFu0c_Ip) C1{ Fi Fc:0 Fp}



static void Test_Ui_BFu0c_Ip()
{
  {
    init_simple_test("Ui_BFu0c_Ip");
    static STRUCT_IF_C Ui_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_Ip, Ui_BFu0c_Ip)
//============================================================================


struct  Ui_BFu0c_L  {
  unsigned int v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0c_L) C1{ Fi Fc:0 FL}



static void Test_Ui_BFu0c_L()
{
  {
    init_simple_test("Ui_BFu0c_L");
    static STRUCT_IF_C Ui_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_L, Ui_BFu0c_L)
//============================================================================


struct  Ui_BFu0c_S  {
  unsigned int v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Ui_BFu0c_S) C1{ Fi Fc:0 Fs}



static void Test_Ui_BFu0c_S()
{
  {
    init_simple_test("Ui_BFu0c_S");
    static STRUCT_IF_C Ui_BFu0c_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_S.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_S, Ui_BFu0c_S)
//============================================================================


struct  Ui_BFu0c_Uc  {
  unsigned int v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0c_Uc) C1{ Fi Fc:0 Fc}



static void Test_Ui_BFu0c_Uc()
{
  {
    init_simple_test("Ui_BFu0c_Uc");
    static STRUCT_IF_C Ui_BFu0c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_Uc, Ui_BFu0c_Uc)
//============================================================================


struct  Ui_BFu0c_Ui  {
  unsigned int v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0c_Ui) C1{ Fi Fc:0 Fi}



static void Test_Ui_BFu0c_Ui()
{
  {
    init_simple_test("Ui_BFu0c_Ui");
    static STRUCT_IF_C Ui_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_Ui, Ui_BFu0c_Ui)
//============================================================================


struct  Ui_BFu0c_Ul  {
  unsigned int v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0c_Ul) C1{ Fi Fc:0 FL}



static void Test_Ui_BFu0c_Ul()
{
  {
    init_simple_test("Ui_BFu0c_Ul");
    static STRUCT_IF_C Ui_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_Ul, Ui_BFu0c_Ul)
//============================================================================


struct  Ui_BFu0c_Us  {
  unsigned int v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0c_Us) C1{ Fi Fc:0 Fs}



static void Test_Ui_BFu0c_Us()
{
  {
    init_simple_test("Ui_BFu0c_Us");
    static STRUCT_IF_C Ui_BFu0c_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_Us, Ui_BFu0c_Us)
//============================================================================


struct  Ui_BFu0c_Vp  {
  unsigned int v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Ui_BFu0c_Vp) C1{ Fi Fc:0 Fp}



static void Test_Ui_BFu0c_Vp()
{
  {
    init_simple_test("Ui_BFu0c_Vp");
    static STRUCT_IF_C Ui_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0c_Vp, Ui_BFu0c_Vp)
//============================================================================


struct  Ui_BFu0i  {
  unsigned int v1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0i) C1{ Fi Fi:0}



static void Test_Ui_BFu0i()
{
  {
    init_simple_test("Ui_BFu0i");
    static STRUCT_IF_C Ui_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i, Ui_BFu0i)
//============================================================================


struct  Ui_BFu0i_BFu0c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0i_BFu0c) C1{ Fi Fi:0 Fc:0}



static void Test_Ui_BFu0i_BFu0c()
{
  {
    init_simple_test("Ui_BFu0i_BFu0c");
    static STRUCT_IF_C Ui_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu0c, Ui_BFu0i_BFu0c)
//============================================================================


struct  Ui_BFu0i_BFu0i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0i_BFu0i) C1{ Fi Fi:0 Fi:0}



static void Test_Ui_BFu0i_BFu0i()
{
  {
    init_simple_test("Ui_BFu0i_BFu0i");
    static STRUCT_IF_C Ui_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu0i, Ui_BFu0i_BFu0i)
//============================================================================


struct  Ui_BFu0i_BFu0ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0i_BFu0ll) C1{ Fi Fi:0 FL:0}



static void Test_Ui_BFu0i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu0ll");
    static STRUCT_IF_C Ui_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu0ll, Ui_BFu0i_BFu0ll)
//============================================================================


struct  Ui_BFu0i_BFu0s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0i_BFu0s) C1{ Fi Fi:0 Fs:0}



static void Test_Ui_BFu0i_BFu0s()
{
  {
    init_simple_test("Ui_BFu0i_BFu0s");
    static STRUCT_IF_C Ui_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu0s, Ui_BFu0i_BFu0s)
//============================================================================


struct  Ui_BFu0i_BFu15i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0i_BFu15i) C1{ Fi Fi:0 Fi:15}



static void Test_Ui_BFu0i_BFu15i()
{
  {
    init_simple_test("Ui_BFu0i_BFu15i");
    static STRUCT_IF_C Ui_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu15i, Ui_BFu0i_BFu15i)
//============================================================================


struct  Ui_BFu0i_BFu15ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0i_BFu15ll) C1{ Fi Fi:0 FL:15}



static void Test_Ui_BFu0i_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu15ll");
    static STRUCT_IF_C Ui_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu15ll, Ui_BFu0i_BFu15ll)
//============================================================================


struct  Ui_BFu0i_BFu15s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0i_BFu15s) C1{ Fi Fi:0 Fs:15}



static void Test_Ui_BFu0i_BFu15s()
{
  {
    init_simple_test("Ui_BFu0i_BFu15s");
    static STRUCT_IF_C Ui_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu15s, Ui_BFu0i_BFu15s)
//============================================================================


struct  Ui_BFu0i_BFu16i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0i_BFu16i) C1{ Fi Fi:0 Fi:16}



static void Test_Ui_BFu0i_BFu16i()
{
  {
    init_simple_test("Ui_BFu0i_BFu16i");
    static STRUCT_IF_C Ui_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu16i, Ui_BFu0i_BFu16i)
//============================================================================


struct  Ui_BFu0i_BFu16ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0i_BFu16ll) C1{ Fi Fi:0 FL:16}



static void Test_Ui_BFu0i_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu16ll");
    static STRUCT_IF_C Ui_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu16ll, Ui_BFu0i_BFu16ll)
//============================================================================


struct  Ui_BFu0i_BFu16s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0i_BFu16s) C1{ Fi Fi:0 Fs:16}



static void Test_Ui_BFu0i_BFu16s()
{
  {
    init_simple_test("Ui_BFu0i_BFu16s");
    static STRUCT_IF_C Ui_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu16s, Ui_BFu0i_BFu16s)
//============================================================================


struct  Ui_BFu0i_BFu17i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0i_BFu17i) C1{ Fi Fi:0 Fi:17}



static void Test_Ui_BFu0i_BFu17i()
{
  {
    init_simple_test("Ui_BFu0i_BFu17i");
    static STRUCT_IF_C Ui_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu17i, Ui_BFu0i_BFu17i)
//============================================================================


struct  Ui_BFu0i_BFu17ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0i_BFu17ll) C1{ Fi Fi:0 FL:17}



static void Test_Ui_BFu0i_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu17ll");
    static STRUCT_IF_C Ui_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu17ll, Ui_BFu0i_BFu17ll)
//============================================================================


struct  Ui_BFu0i_BFu1c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0i_BFu1c) C1{ Fi Fi:0 Fc:1}



static void Test_Ui_BFu0i_BFu1c()
{
  {
    init_simple_test("Ui_BFu0i_BFu1c");
    static STRUCT_IF_C Ui_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu1c, Ui_BFu0i_BFu1c)
//============================================================================


struct  Ui_BFu0i_BFu1i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0i_BFu1i) C1{ Fi Fi:0 Fi:1}



static void Test_Ui_BFu0i_BFu1i()
{
  {
    init_simple_test("Ui_BFu0i_BFu1i");
    static STRUCT_IF_C Ui_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu1i, Ui_BFu0i_BFu1i)
//============================================================================


struct  Ui_BFu0i_BFu1ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0i_BFu1ll) C1{ Fi Fi:0 FL:1}



static void Test_Ui_BFu0i_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu1ll");
    static STRUCT_IF_C Ui_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu1ll, Ui_BFu0i_BFu1ll)
//============================================================================


struct  Ui_BFu0i_BFu1s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0i_BFu1s) C1{ Fi Fi:0 Fs:1}



static void Test_Ui_BFu0i_BFu1s()
{
  {
    init_simple_test("Ui_BFu0i_BFu1s");
    static STRUCT_IF_C Ui_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu1s, Ui_BFu0i_BFu1s)
//============================================================================


struct  Ui_BFu0i_BFu31i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0i_BFu31i) C1{ Fi Fi:0 Fi:31}



static void Test_Ui_BFu0i_BFu31i()
{
  {
    init_simple_test("Ui_BFu0i_BFu31i");
    static STRUCT_IF_C Ui_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu31i, Ui_BFu0i_BFu31i)
//============================================================================


struct  Ui_BFu0i_BFu31ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0i_BFu31ll) C1{ Fi Fi:0 FL:31}



static void Test_Ui_BFu0i_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu31ll");
    static STRUCT_IF_C Ui_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu31ll, Ui_BFu0i_BFu31ll)
//============================================================================


struct  Ui_BFu0i_BFu32i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0i_BFu32i) C1{ Fi Fi:0 Fi:32}



static void Test_Ui_BFu0i_BFu32i()
{
  {
    init_simple_test("Ui_BFu0i_BFu32i");
    static STRUCT_IF_C Ui_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu32i, Ui_BFu0i_BFu32i)
//============================================================================


struct  Ui_BFu0i_BFu32ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0i_BFu32ll) C1{ Fi Fi:0 FL:32}



static void Test_Ui_BFu0i_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu32ll");
    static STRUCT_IF_C Ui_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu32ll, Ui_BFu0i_BFu32ll)
//============================================================================


struct  Ui_BFu0i_BFu33  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0i_BFu33) C1{ Fi Fi:0 FL:33}



static void Test_Ui_BFu0i_BFu33()
{
  {
    init_simple_test("Ui_BFu0i_BFu33");
    static STRUCT_IF_C Ui_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu33, Ui_BFu0i_BFu33)
//============================================================================


struct  Ui_BFu0i_BFu7c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0i_BFu7c) C1{ Fi Fi:0 Fc:7}



static void Test_Ui_BFu0i_BFu7c()
{
  {
    init_simple_test("Ui_BFu0i_BFu7c");
    static STRUCT_IF_C Ui_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu7c, Ui_BFu0i_BFu7c)
//============================================================================


struct  Ui_BFu0i_BFu7i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0i_BFu7i) C1{ Fi Fi:0 Fi:7}



static void Test_Ui_BFu0i_BFu7i()
{
  {
    init_simple_test("Ui_BFu0i_BFu7i");
    static STRUCT_IF_C Ui_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu7i, Ui_BFu0i_BFu7i)
//============================================================================


struct  Ui_BFu0i_BFu7ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0i_BFu7ll) C1{ Fi Fi:0 FL:7}



static void Test_Ui_BFu0i_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu7ll");
    static STRUCT_IF_C Ui_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu7ll, Ui_BFu0i_BFu7ll)
//============================================================================


struct  Ui_BFu0i_BFu7s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0i_BFu7s) C1{ Fi Fi:0 Fs:7}



static void Test_Ui_BFu0i_BFu7s()
{
  {
    init_simple_test("Ui_BFu0i_BFu7s");
    static STRUCT_IF_C Ui_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu7s, Ui_BFu0i_BFu7s)
//============================================================================


struct  Ui_BFu0i_BFu8c  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0i_BFu8c) C1{ Fi Fi:0 Fc:8}



static void Test_Ui_BFu0i_BFu8c()
{
  {
    init_simple_test("Ui_BFu0i_BFu8c");
    static STRUCT_IF_C Ui_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu8c, Ui_BFu0i_BFu8c)
//============================================================================


struct  Ui_BFu0i_BFu8i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0i_BFu8i) C1{ Fi Fi:0 Fi:8}



static void Test_Ui_BFu0i_BFu8i()
{
  {
    init_simple_test("Ui_BFu0i_BFu8i");
    static STRUCT_IF_C Ui_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu8i, Ui_BFu0i_BFu8i)
//============================================================================


struct  Ui_BFu0i_BFu8ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0i_BFu8ll) C1{ Fi Fi:0 FL:8}



static void Test_Ui_BFu0i_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu8ll");
    static STRUCT_IF_C Ui_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu8ll, Ui_BFu0i_BFu8ll)
//============================================================================


struct  Ui_BFu0i_BFu8s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0i_BFu8s) C1{ Fi Fi:0 Fs:8}



static void Test_Ui_BFu0i_BFu8s()
{
  {
    init_simple_test("Ui_BFu0i_BFu8s");
    static STRUCT_IF_C Ui_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu8s, Ui_BFu0i_BFu8s)
//============================================================================


struct  Ui_BFu0i_BFu9i  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0i_BFu9i) C1{ Fi Fi:0 Fi:9}



static void Test_Ui_BFu0i_BFu9i()
{
  {
    init_simple_test("Ui_BFu0i_BFu9i");
    static STRUCT_IF_C Ui_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu9i, Ui_BFu0i_BFu9i)
//============================================================================


struct  Ui_BFu0i_BFu9ll  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0i_BFu9ll) C1{ Fi Fi:0 FL:9}



static void Test_Ui_BFu0i_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0i_BFu9ll");
    static STRUCT_IF_C Ui_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu9ll, Ui_BFu0i_BFu9ll)
//============================================================================


struct  Ui_BFu0i_BFu9s  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0i_BFu9s) C1{ Fi Fi:0 Fs:9}



static void Test_Ui_BFu0i_BFu9s()
{
  {
    init_simple_test("Ui_BFu0i_BFu9s");
    static STRUCT_IF_C Ui_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_BFu9s, Ui_BFu0i_BFu9s)
//============================================================================


struct  Ui_BFu0i_C  {
  unsigned int v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Ui_BFu0i_C) C1{ Fi Fi:0 Fc}



static void Test_Ui_BFu0i_C()
{
  {
    init_simple_test("Ui_BFu0i_C");
    static STRUCT_IF_C Ui_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_C, Ui_BFu0i_C)
//============================================================================


struct  Ui_BFu0i_D  {
  unsigned int v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Ui_BFu0i_D) C1{ Fi Fi:0 FL}



static void Test_Ui_BFu0i_D()
{
  {
    init_simple_test("Ui_BFu0i_D");
    static STRUCT_IF_C Ui_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_D, Ui_BFu0i_D)
//============================================================================


struct  Ui_BFu0i_F  {
  unsigned int v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Ui_BFu0i_F) C1{ Fi Fi:0 Fi}



static void Test_Ui_BFu0i_F()
{
  {
    init_simple_test("Ui_BFu0i_F");
    static STRUCT_IF_C Ui_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_F, Ui_BFu0i_F)
//============================================================================


struct  Ui_BFu0i_I  {
  unsigned int v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Ui_BFu0i_I) C1{ Fi Fi:0 Fi}



static void Test_Ui_BFu0i_I()
{
  {
    init_simple_test("Ui_BFu0i_I");
    static STRUCT_IF_C Ui_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_I, Ui_BFu0i_I)
//============================================================================


struct  Ui_BFu0i_Ip  {
  unsigned int v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Ui_BFu0i_Ip) C1{ Fi Fi:0 Fp}



static void Test_Ui_BFu0i_Ip()
{
  {
    init_simple_test("Ui_BFu0i_Ip");
    static STRUCT_IF_C Ui_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_Ip, Ui_BFu0i_Ip)
//============================================================================


struct  Ui_BFu0i_L  {
  unsigned int v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0i_L) C1{ Fi Fi:0 FL}



static void Test_Ui_BFu0i_L()
{
  {
    init_simple_test("Ui_BFu0i_L");
    static STRUCT_IF_C Ui_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_L, Ui_BFu0i_L)
//============================================================================


struct  Ui_BFu0i_S  {
  unsigned int v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Ui_BFu0i_S) C1{ Fi Fi:0 Fs}



static void Test_Ui_BFu0i_S()
{
  {
    init_simple_test("Ui_BFu0i_S");
    static STRUCT_IF_C Ui_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_S, Ui_BFu0i_S)
//============================================================================


struct  Ui_BFu0i_Uc  {
  unsigned int v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0i_Uc) C1{ Fi Fi:0 Fc}



static void Test_Ui_BFu0i_Uc()
{
  {
    init_simple_test("Ui_BFu0i_Uc");
    static STRUCT_IF_C Ui_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_Uc, Ui_BFu0i_Uc)
//============================================================================


struct  Ui_BFu0i_Ui  {
  unsigned int v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0i_Ui) C1{ Fi Fi:0 Fi}



static void Test_Ui_BFu0i_Ui()
{
  {
    init_simple_test("Ui_BFu0i_Ui");
    static STRUCT_IF_C Ui_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_Ui, Ui_BFu0i_Ui)
//============================================================================


struct  Ui_BFu0i_Ul  {
  unsigned int v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0i_Ul) C1{ Fi Fi:0 FL}



static void Test_Ui_BFu0i_Ul()
{
  {
    init_simple_test("Ui_BFu0i_Ul");
    static STRUCT_IF_C Ui_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_Ul, Ui_BFu0i_Ul)
//============================================================================


struct  Ui_BFu0i_Us  {
  unsigned int v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0i_Us) C1{ Fi Fi:0 Fs}



static void Test_Ui_BFu0i_Us()
{
  {
    init_simple_test("Ui_BFu0i_Us");
    static STRUCT_IF_C Ui_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_Us, Ui_BFu0i_Us)
//============================================================================


struct  Ui_BFu0i_Vp  {
  unsigned int v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Ui_BFu0i_Vp) C1{ Fi Fi:0 Fp}



static void Test_Ui_BFu0i_Vp()
{
  {
    init_simple_test("Ui_BFu0i_Vp");
    static STRUCT_IF_C Ui_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0i_Vp, Ui_BFu0i_Vp)
//============================================================================


struct  Ui_BFu0ll  {
  unsigned int v1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0ll) C1{ Fi FL:0}



static void Test_Ui_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0ll");
    static STRUCT_IF_C Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll, Ui_BFu0ll)
//============================================================================


struct  Ui_BFu0ll_BFu0c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0ll_BFu0c) C1{ Fi FL:0 Fc:0}



static void Test_Ui_BFu0ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0c");
    static STRUCT_IF_C Ui_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu0c, Ui_BFu0ll_BFu0c)
//============================================================================


struct  Ui_BFu0ll_BFu0i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0ll_BFu0i) C1{ Fi FL:0 Fi:0}



static void Test_Ui_BFu0ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0i");
    static STRUCT_IF_C Ui_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu0i, Ui_BFu0ll_BFu0i)
//============================================================================


struct  Ui_BFu0ll_BFu0ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0ll_BFu0ll) C1{ Fi FL:0 FL:0}



static void Test_Ui_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu0ll, Ui_BFu0ll_BFu0ll)
//============================================================================


struct  Ui_BFu0ll_BFu0s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0ll_BFu0s) C1{ Fi FL:0 Fs:0}



static void Test_Ui_BFu0ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu0s");
    static STRUCT_IF_C Ui_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu0s, Ui_BFu0ll_BFu0s)
//============================================================================


struct  Ui_BFu0ll_BFu15i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0ll_BFu15i) C1{ Fi FL:0 Fi:15}



static void Test_Ui_BFu0ll_BFu15i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu15i");
    static STRUCT_IF_C Ui_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ui_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ui_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu15i, Ui_BFu0ll_BFu15i)
//============================================================================


struct  Ui_BFu0ll_BFu15ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0ll_BFu15ll) C1{ Fi FL:0 FL:15}



static void Test_Ui_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu15ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ui_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ui_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu15ll, Ui_BFu0ll_BFu15ll)
//============================================================================


struct  Ui_BFu0ll_BFu15s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0ll_BFu15s) C1{ Fi FL:0 Fs:15}



static void Test_Ui_BFu0ll_BFu15s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu15s");
    static STRUCT_IF_C Ui_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ui_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ui_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu15s, Ui_BFu0ll_BFu15s)
//============================================================================


struct  Ui_BFu0ll_BFu16i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0ll_BFu16i) C1{ Fi FL:0 Fi:16}



static void Test_Ui_BFu0ll_BFu16i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu16i");
    static STRUCT_IF_C Ui_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ui_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ui_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu16i, Ui_BFu0ll_BFu16i)
//============================================================================


struct  Ui_BFu0ll_BFu16ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0ll_BFu16ll) C1{ Fi FL:0 FL:16}



static void Test_Ui_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu16ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ui_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ui_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu16ll, Ui_BFu0ll_BFu16ll)
//============================================================================


struct  Ui_BFu0ll_BFu16s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0ll_BFu16s) C1{ Fi FL:0 Fs:16}



static void Test_Ui_BFu0ll_BFu16s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu16s");
    static STRUCT_IF_C Ui_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ui_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ui_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu16s, Ui_BFu0ll_BFu16s)
//============================================================================


struct  Ui_BFu0ll_BFu17i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0ll_BFu17i) C1{ Fi FL:0 Fi:17}



static void Test_Ui_BFu0ll_BFu17i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu17i");
    static STRUCT_IF_C Ui_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ui_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ui_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu17i, Ui_BFu0ll_BFu17i)
//============================================================================


struct  Ui_BFu0ll_BFu17ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0ll_BFu17ll) C1{ Fi FL:0 FL:17}



static void Test_Ui_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu17ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ui_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ui_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu17ll, Ui_BFu0ll_BFu17ll)
//============================================================================


struct  Ui_BFu0ll_BFu1c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1c) C1{ Fi FL:0 Fc:1}



static void Test_Ui_BFu0ll_BFu1c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1c");
    static STRUCT_IF_C Ui_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu1c, Ui_BFu0ll_BFu1c)
//============================================================================


struct  Ui_BFu0ll_BFu1i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1i) C1{ Fi FL:0 Fi:1}



static void Test_Ui_BFu0ll_BFu1i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1i");
    static STRUCT_IF_C Ui_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu1i, Ui_BFu0ll_BFu1i)
//============================================================================


struct  Ui_BFu0ll_BFu1ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1ll) C1{ Fi FL:0 FL:1}



static void Test_Ui_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu1ll, Ui_BFu0ll_BFu1ll)
//============================================================================


struct  Ui_BFu0ll_BFu1s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0ll_BFu1s) C1{ Fi FL:0 Fs:1}



static void Test_Ui_BFu0ll_BFu1s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu1s");
    static STRUCT_IF_C Ui_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ui_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu1s, Ui_BFu0ll_BFu1s)
//============================================================================


struct  Ui_BFu0ll_BFu31i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0ll_BFu31i) C1{ Fi FL:0 Fi:31}



static void Test_Ui_BFu0ll_BFu31i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu31i");
    static STRUCT_IF_C Ui_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ui_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ui_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu31i, Ui_BFu0ll_BFu31i)
//============================================================================


struct  Ui_BFu0ll_BFu31ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0ll_BFu31ll) C1{ Fi FL:0 FL:31}



static void Test_Ui_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu31ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ui_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ui_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu31ll, Ui_BFu0ll_BFu31ll)
//============================================================================


struct  Ui_BFu0ll_BFu32i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0ll_BFu32i) C1{ Fi FL:0 Fi:32}



static void Test_Ui_BFu0ll_BFu32i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu32i");
    static STRUCT_IF_C Ui_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ui_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ui_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu32i, Ui_BFu0ll_BFu32i)
//============================================================================


struct  Ui_BFu0ll_BFu32ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0ll_BFu32ll) C1{ Fi FL:0 FL:32}



static void Test_Ui_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu32ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ui_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ui_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu32ll, Ui_BFu0ll_BFu32ll)
//============================================================================


struct  Ui_BFu0ll_BFu33  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0ll_BFu33) C1{ Fi FL:0 FL:33}



static void Test_Ui_BFu0ll_BFu33()
{
  {
    init_simple_test("Ui_BFu0ll_BFu33");
    static STRUCT_IF_C Ui_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu33, Ui_BFu0ll_BFu33)
//============================================================================


struct  Ui_BFu0ll_BFu7c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7c) C1{ Fi FL:0 Fc:7}



static void Test_Ui_BFu0ll_BFu7c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7c");
    static STRUCT_IF_C Ui_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu7c, Ui_BFu0ll_BFu7c)
//============================================================================


struct  Ui_BFu0ll_BFu7i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7i) C1{ Fi FL:0 Fi:7}



static void Test_Ui_BFu0ll_BFu7i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7i");
    static STRUCT_IF_C Ui_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu7i, Ui_BFu0ll_BFu7i)
//============================================================================


struct  Ui_BFu0ll_BFu7ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7ll) C1{ Fi FL:0 FL:7}



static void Test_Ui_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu7ll, Ui_BFu0ll_BFu7ll)
//============================================================================


struct  Ui_BFu0ll_BFu7s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0ll_BFu7s) C1{ Fi FL:0 Fs:7}



static void Test_Ui_BFu0ll_BFu7s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu7s");
    static STRUCT_IF_C Ui_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ui_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ui_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu7s, Ui_BFu0ll_BFu7s)
//============================================================================


struct  Ui_BFu0ll_BFu8c  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8c) C1{ Fi FL:0 Fc:8}



static void Test_Ui_BFu0ll_BFu8c()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8c");
    static STRUCT_IF_C Ui_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu8c, Ui_BFu0ll_BFu8c)
//============================================================================


struct  Ui_BFu0ll_BFu8i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8i) C1{ Fi FL:0 Fi:8}



static void Test_Ui_BFu0ll_BFu8i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8i");
    static STRUCT_IF_C Ui_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu8i, Ui_BFu0ll_BFu8i)
//============================================================================


struct  Ui_BFu0ll_BFu8ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8ll) C1{ Fi FL:0 FL:8}



static void Test_Ui_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu8ll, Ui_BFu0ll_BFu8ll)
//============================================================================


struct  Ui_BFu0ll_BFu8s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0ll_BFu8s) C1{ Fi FL:0 Fs:8}



static void Test_Ui_BFu0ll_BFu8s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu8s");
    static STRUCT_IF_C Ui_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ui_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ui_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu8s, Ui_BFu0ll_BFu8s)
//============================================================================


struct  Ui_BFu0ll_BFu9i  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0ll_BFu9i) C1{ Fi FL:0 Fi:9}



static void Test_Ui_BFu0ll_BFu9i()
{
  {
    init_simple_test("Ui_BFu0ll_BFu9i");
    static STRUCT_IF_C Ui_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ui_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ui_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu9i, Ui_BFu0ll_BFu9i)
//============================================================================


struct  Ui_BFu0ll_BFu9ll  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0ll_BFu9ll) C1{ Fi FL:0 FL:9}



static void Test_Ui_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0ll_BFu9ll");
    static STRUCT_IF_C Ui_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ui_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ui_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu9ll, Ui_BFu0ll_BFu9ll)
//============================================================================


struct  Ui_BFu0ll_BFu9s  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0ll_BFu9s) C1{ Fi FL:0 Fs:9}



static void Test_Ui_BFu0ll_BFu9s()
{
  {
    init_simple_test("Ui_BFu0ll_BFu9s");
    static STRUCT_IF_C Ui_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ui_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ui_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_BFu9s, Ui_BFu0ll_BFu9s)
//============================================================================


struct  Ui_BFu0ll_C  {
  unsigned int v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Ui_BFu0ll_C) C1{ Fi FL:0 Fc}



static void Test_Ui_BFu0ll_C()
{
  {
    init_simple_test("Ui_BFu0ll_C");
    static STRUCT_IF_C Ui_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_C, Ui_BFu0ll_C)
//============================================================================


struct  Ui_BFu0ll_D  {
  unsigned int v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Ui_BFu0ll_D) C1{ Fi FL:0 FL}



static void Test_Ui_BFu0ll_D()
{
  {
    init_simple_test("Ui_BFu0ll_D");
    static STRUCT_IF_C Ui_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_D, Ui_BFu0ll_D)
//============================================================================


struct  Ui_BFu0ll_F  {
  unsigned int v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Ui_BFu0ll_F) C1{ Fi FL:0 Fi}



static void Test_Ui_BFu0ll_F()
{
  {
    init_simple_test("Ui_BFu0ll_F");
    static STRUCT_IF_C Ui_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_F, Ui_BFu0ll_F)
//============================================================================


struct  Ui_BFu0ll_I  {
  unsigned int v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Ui_BFu0ll_I) C1{ Fi FL:0 Fi}



static void Test_Ui_BFu0ll_I()
{
  {
    init_simple_test("Ui_BFu0ll_I");
    static STRUCT_IF_C Ui_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_I, Ui_BFu0ll_I)
//============================================================================


struct  Ui_BFu0ll_Ip  {
  unsigned int v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Ui_BFu0ll_Ip) C1{ Fi FL:0 Fp}



static void Test_Ui_BFu0ll_Ip()
{
  {
    init_simple_test("Ui_BFu0ll_Ip");
    static STRUCT_IF_C Ui_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_Ip, Ui_BFu0ll_Ip)
//============================================================================


struct  Ui_BFu0ll_L  {
  unsigned int v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0ll_L) C1{ Fi FL:0 FL}



static void Test_Ui_BFu0ll_L()
{
  {
    init_simple_test("Ui_BFu0ll_L");
    static STRUCT_IF_C Ui_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_L, Ui_BFu0ll_L)
//============================================================================


struct  Ui_BFu0ll_S  {
  unsigned int v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Ui_BFu0ll_S) C1{ Fi FL:0 Fs}



static void Test_Ui_BFu0ll_S()
{
  {
    init_simple_test("Ui_BFu0ll_S");
    static STRUCT_IF_C Ui_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_S, Ui_BFu0ll_S)
//============================================================================


struct  Ui_BFu0ll_Uc  {
  unsigned int v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0ll_Uc) C1{ Fi FL:0 Fc}



static void Test_Ui_BFu0ll_Uc()
{
  {
    init_simple_test("Ui_BFu0ll_Uc");
    static STRUCT_IF_C Ui_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_Uc, Ui_BFu0ll_Uc)
//============================================================================


struct  Ui_BFu0ll_Ui  {
  unsigned int v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0ll_Ui) C1{ Fi FL:0 Fi}



static void Test_Ui_BFu0ll_Ui()
{
  {
    init_simple_test("Ui_BFu0ll_Ui");
    static STRUCT_IF_C Ui_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_Ui, Ui_BFu0ll_Ui)
//============================================================================


struct  Ui_BFu0ll_Ul  {
  unsigned int v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0ll_Ul) C1{ Fi FL:0 FL}



static void Test_Ui_BFu0ll_Ul()
{
  {
    init_simple_test("Ui_BFu0ll_Ul");
    static STRUCT_IF_C Ui_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_Ul, Ui_BFu0ll_Ul)
//============================================================================


struct  Ui_BFu0ll_Us  {
  unsigned int v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0ll_Us) C1{ Fi FL:0 Fs}



static void Test_Ui_BFu0ll_Us()
{
  {
    init_simple_test("Ui_BFu0ll_Us");
    static STRUCT_IF_C Ui_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Ui_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_Us, Ui_BFu0ll_Us)
//============================================================================


struct  Ui_BFu0ll_Vp  {
  unsigned int v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Ui_BFu0ll_Vp) C1{ Fi FL:0 Fp}



static void Test_Ui_BFu0ll_Vp()
{
  {
    init_simple_test("Ui_BFu0ll_Vp");
    static STRUCT_IF_C Ui_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0ll_Vp, Ui_BFu0ll_Vp)
//============================================================================


struct  Ui_BFu0s  {
  unsigned int v1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0s) C1{ Fi Fs:0}



static void Test_Ui_BFu0s()
{
  {
    init_simple_test("Ui_BFu0s");
    static STRUCT_IF_C Ui_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s, Ui_BFu0s)
//============================================================================


struct  Ui_BFu0s_BFu0c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Ui_BFu0s_BFu0c) C1{ Fi Fs:0 Fc:0}



static void Test_Ui_BFu0s_BFu0c()
{
  {
    init_simple_test("Ui_BFu0s_BFu0c");
    static STRUCT_IF_C Ui_BFu0s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu0c, Ui_BFu0s_BFu0c)
//============================================================================


struct  Ui_BFu0s_BFu0i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Ui_BFu0s_BFu0i) C1{ Fi Fs:0 Fi:0}



static void Test_Ui_BFu0s_BFu0i()
{
  {
    init_simple_test("Ui_BFu0s_BFu0i");
    static STRUCT_IF_C Ui_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu0i, Ui_BFu0s_BFu0i)
//============================================================================


struct  Ui_BFu0s_BFu0ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Ui_BFu0s_BFu0ll) C1{ Fi Fs:0 FL:0}



static void Test_Ui_BFu0s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu0ll");
    static STRUCT_IF_C Ui_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ui_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu0ll, Ui_BFu0s_BFu0ll)
//============================================================================


struct  Ui_BFu0s_BFu0s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Ui_BFu0s_BFu0s) C1{ Fi Fs:0 Fs:0}



static void Test_Ui_BFu0s_BFu0s()
{
  {
    init_simple_test("Ui_BFu0s_BFu0s");
    static STRUCT_IF_C Ui_BFu0s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Ui_BFu0s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu0s, Ui_BFu0s_BFu0s)
//============================================================================


struct  Ui_BFu0s_BFu15i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Ui_BFu0s_BFu15i) C1{ Fi Fs:0 Fi:15}



static void Test_Ui_BFu0s_BFu15i()
{
  {
    init_simple_test("Ui_BFu0s_BFu15i");
    static STRUCT_IF_C Ui_BFu0s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu15i, Ui_BFu0s_BFu15i)
//============================================================================


struct  Ui_BFu0s_BFu15ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Ui_BFu0s_BFu15ll) C1{ Fi Fs:0 FL:15}



static void Test_Ui_BFu0s_BFu15ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu15ll");
    static STRUCT_IF_C Ui_BFu0s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu15ll, Ui_BFu0s_BFu15ll)
//============================================================================


struct  Ui_BFu0s_BFu15s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Ui_BFu0s_BFu15s) C1{ Fi Fs:0 Fs:15}



static void Test_Ui_BFu0s_BFu15s()
{
  {
    init_simple_test("Ui_BFu0s_BFu15s");
    static STRUCT_IF_C Ui_BFu0s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu15s, Ui_BFu0s_BFu15s)
//============================================================================


struct  Ui_BFu0s_BFu16i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Ui_BFu0s_BFu16i) C1{ Fi Fs:0 Fi:16}



static void Test_Ui_BFu0s_BFu16i()
{
  {
    init_simple_test("Ui_BFu0s_BFu16i");
    static STRUCT_IF_C Ui_BFu0s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu16i, Ui_BFu0s_BFu16i)
//============================================================================


struct  Ui_BFu0s_BFu16ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Ui_BFu0s_BFu16ll) C1{ Fi Fs:0 FL:16}



static void Test_Ui_BFu0s_BFu16ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu16ll");
    static STRUCT_IF_C Ui_BFu0s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu16ll, Ui_BFu0s_BFu16ll)
//============================================================================


struct  Ui_BFu0s_BFu16s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Ui_BFu0s_BFu16s) C1{ Fi Fs:0 Fs:16}



static void Test_Ui_BFu0s_BFu16s()
{
  {
    init_simple_test("Ui_BFu0s_BFu16s");
    static STRUCT_IF_C Ui_BFu0s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu16s, Ui_BFu0s_BFu16s)
//============================================================================


struct  Ui_BFu0s_BFu17i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Ui_BFu0s_BFu17i) C1{ Fi Fs:0 Fi:17}



static void Test_Ui_BFu0s_BFu17i()
{
  {
    init_simple_test("Ui_BFu0s_BFu17i");
    static STRUCT_IF_C Ui_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu17i, Ui_BFu0s_BFu17i)
//============================================================================


struct  Ui_BFu0s_BFu17ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Ui_BFu0s_BFu17ll) C1{ Fi Fs:0 FL:17}



static void Test_Ui_BFu0s_BFu17ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu17ll");
    static STRUCT_IF_C Ui_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu17ll, Ui_BFu0s_BFu17ll)
//============================================================================


struct  Ui_BFu0s_BFu1c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Ui_BFu0s_BFu1c) C1{ Fi Fs:0 Fc:1}



static void Test_Ui_BFu0s_BFu1c()
{
  {
    init_simple_test("Ui_BFu0s_BFu1c");
    static STRUCT_IF_C Ui_BFu0s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu1c, Ui_BFu0s_BFu1c)
//============================================================================


struct  Ui_BFu0s_BFu1i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Ui_BFu0s_BFu1i) C1{ Fi Fs:0 Fi:1}



static void Test_Ui_BFu0s_BFu1i()
{
  {
    init_simple_test("Ui_BFu0s_BFu1i");
    static STRUCT_IF_C Ui_BFu0s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu1i, Ui_BFu0s_BFu1i)
//============================================================================


struct  Ui_BFu0s_BFu1ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Ui_BFu0s_BFu1ll) C1{ Fi Fs:0 FL:1}



static void Test_Ui_BFu0s_BFu1ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu1ll");
    static STRUCT_IF_C Ui_BFu0s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu1ll, Ui_BFu0s_BFu1ll)
//============================================================================


struct  Ui_BFu0s_BFu1s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Ui_BFu0s_BFu1s) C1{ Fi Fs:0 Fs:1}



static void Test_Ui_BFu0s_BFu1s()
{
  {
    init_simple_test("Ui_BFu0s_BFu1s");
    static STRUCT_IF_C Ui_BFu0s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu1s, Ui_BFu0s_BFu1s)
//============================================================================


struct  Ui_BFu0s_BFu31i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Ui_BFu0s_BFu31i) C1{ Fi Fs:0 Fi:31}



static void Test_Ui_BFu0s_BFu31i()
{
  {
    init_simple_test("Ui_BFu0s_BFu31i");
    static STRUCT_IF_C Ui_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu31i, Ui_BFu0s_BFu31i)
//============================================================================


struct  Ui_BFu0s_BFu31ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Ui_BFu0s_BFu31ll) C1{ Fi Fs:0 FL:31}



static void Test_Ui_BFu0s_BFu31ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu31ll");
    static STRUCT_IF_C Ui_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu31ll, Ui_BFu0s_BFu31ll)
//============================================================================


struct  Ui_BFu0s_BFu32i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Ui_BFu0s_BFu32i) C1{ Fi Fs:0 Fi:32}



static void Test_Ui_BFu0s_BFu32i()
{
  {
    init_simple_test("Ui_BFu0s_BFu32i");
    static STRUCT_IF_C Ui_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu32i, Ui_BFu0s_BFu32i)
//============================================================================


struct  Ui_BFu0s_BFu32ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Ui_BFu0s_BFu32ll) C1{ Fi Fs:0 FL:32}



static void Test_Ui_BFu0s_BFu32ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu32ll");
    static STRUCT_IF_C Ui_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu32ll, Ui_BFu0s_BFu32ll)
//============================================================================


struct  Ui_BFu0s_BFu33  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Ui_BFu0s_BFu33) C1{ Fi Fs:0 FL:33}



static void Test_Ui_BFu0s_BFu33()
{
  {
    init_simple_test("Ui_BFu0s_BFu33");
    static STRUCT_IF_C Ui_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu33, Ui_BFu0s_BFu33)
//============================================================================


struct  Ui_BFu0s_BFu7c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Ui_BFu0s_BFu7c) C1{ Fi Fs:0 Fc:7}



static void Test_Ui_BFu0s_BFu7c()
{
  {
    init_simple_test("Ui_BFu0s_BFu7c");
    static STRUCT_IF_C Ui_BFu0s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu7c, Ui_BFu0s_BFu7c)
//============================================================================


struct  Ui_BFu0s_BFu7i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Ui_BFu0s_BFu7i) C1{ Fi Fs:0 Fi:7}



static void Test_Ui_BFu0s_BFu7i()
{
  {
    init_simple_test("Ui_BFu0s_BFu7i");
    static STRUCT_IF_C Ui_BFu0s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu7i, Ui_BFu0s_BFu7i)
//============================================================================


struct  Ui_BFu0s_BFu7ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Ui_BFu0s_BFu7ll) C1{ Fi Fs:0 FL:7}



static void Test_Ui_BFu0s_BFu7ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu7ll");
    static STRUCT_IF_C Ui_BFu0s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu7ll, Ui_BFu0s_BFu7ll)
//============================================================================


struct  Ui_BFu0s_BFu7s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Ui_BFu0s_BFu7s) C1{ Fi Fs:0 Fs:7}



static void Test_Ui_BFu0s_BFu7s()
{
  {
    init_simple_test("Ui_BFu0s_BFu7s");
    static STRUCT_IF_C Ui_BFu0s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu7s, Ui_BFu0s_BFu7s)
//============================================================================


struct  Ui_BFu0s_BFu8c  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Ui_BFu0s_BFu8c) C1{ Fi Fs:0 Fc:8}



static void Test_Ui_BFu0s_BFu8c()
{
  {
    init_simple_test("Ui_BFu0s_BFu8c");
    static STRUCT_IF_C Ui_BFu0s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu8c, Ui_BFu0s_BFu8c)
//============================================================================


struct  Ui_BFu0s_BFu8i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Ui_BFu0s_BFu8i) C1{ Fi Fs:0 Fi:8}



static void Test_Ui_BFu0s_BFu8i()
{
  {
    init_simple_test("Ui_BFu0s_BFu8i");
    static STRUCT_IF_C Ui_BFu0s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu8i, Ui_BFu0s_BFu8i)
//============================================================================


struct  Ui_BFu0s_BFu8ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Ui_BFu0s_BFu8ll) C1{ Fi Fs:0 FL:8}



static void Test_Ui_BFu0s_BFu8ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu8ll");
    static STRUCT_IF_C Ui_BFu0s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu8ll, Ui_BFu0s_BFu8ll)
//============================================================================


struct  Ui_BFu0s_BFu8s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Ui_BFu0s_BFu8s) C1{ Fi Fs:0 Fs:8}



static void Test_Ui_BFu0s_BFu8s()
{
  {
    init_simple_test("Ui_BFu0s_BFu8s");
    static STRUCT_IF_C Ui_BFu0s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu8s, Ui_BFu0s_BFu8s)
//============================================================================


struct  Ui_BFu0s_BFu9i  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Ui_BFu0s_BFu9i) C1{ Fi Fs:0 Fi:9}



static void Test_Ui_BFu0s_BFu9i()
{
  {
    init_simple_test("Ui_BFu0s_BFu9i");
    static STRUCT_IF_C Ui_BFu0s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu9i, Ui_BFu0s_BFu9i)
//============================================================================


struct  Ui_BFu0s_BFu9ll  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Ui_BFu0s_BFu9ll) C1{ Fi Fs:0 FL:9}



static void Test_Ui_BFu0s_BFu9ll()
{
  {
    init_simple_test("Ui_BFu0s_BFu9ll");
    static STRUCT_IF_C Ui_BFu0s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu9ll, Ui_BFu0s_BFu9ll)
//============================================================================


struct  Ui_BFu0s_BFu9s  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Ui_BFu0s_BFu9s) C1{ Fi Fs:0 Fs:9}



static void Test_Ui_BFu0s_BFu9s()
{
  {
    init_simple_test("Ui_BFu0s_BFu9s");
    static STRUCT_IF_C Ui_BFu0s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_BFu9s, Ui_BFu0s_BFu9s)
//============================================================================


struct  Ui_BFu0s_C  {
  unsigned int v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Ui_BFu0s_C) C1{ Fi Fs:0 Fc}



static void Test_Ui_BFu0s_C()
{
  {
    init_simple_test("Ui_BFu0s_C");
    static STRUCT_IF_C Ui_BFu0s_C lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_C)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_C.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_C, Ui_BFu0s_C)
//============================================================================


struct  Ui_BFu0s_D  {
  unsigned int v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Ui_BFu0s_D) C1{ Fi Fs:0 FL}



static void Test_Ui_BFu0s_D()
{
  {
    init_simple_test("Ui_BFu0s_D");
    static STRUCT_IF_C Ui_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_D, Ui_BFu0s_D)
//============================================================================


struct  Ui_BFu0s_F  {
  unsigned int v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Ui_BFu0s_F) C1{ Fi Fs:0 Fi}



static void Test_Ui_BFu0s_F()
{
  {
    init_simple_test("Ui_BFu0s_F");
    static STRUCT_IF_C Ui_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_F, Ui_BFu0s_F)
//============================================================================


struct  Ui_BFu0s_I  {
  unsigned int v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Ui_BFu0s_I) C1{ Fi Fs:0 Fi}



static void Test_Ui_BFu0s_I()
{
  {
    init_simple_test("Ui_BFu0s_I");
    static STRUCT_IF_C Ui_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_I, Ui_BFu0s_I)
//============================================================================


struct  Ui_BFu0s_Ip  {
  unsigned int v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Ui_BFu0s_Ip) C1{ Fi Fs:0 Fp}



static void Test_Ui_BFu0s_Ip()
{
  {
    init_simple_test("Ui_BFu0s_Ip");
    static STRUCT_IF_C Ui_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_Ip, Ui_BFu0s_Ip)
//============================================================================


struct  Ui_BFu0s_L  {
  unsigned int v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Ui_BFu0s_L) C1{ Fi Fs:0 FL}



static void Test_Ui_BFu0s_L()
{
  {
    init_simple_test("Ui_BFu0s_L");
    static STRUCT_IF_C Ui_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_L, Ui_BFu0s_L)
//============================================================================


struct  Ui_BFu0s_S  {
  unsigned int v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Ui_BFu0s_S) C1{ Fi Fs:0 Fs}



static void Test_Ui_BFu0s_S()
{
  {
    init_simple_test("Ui_BFu0s_S");
    static STRUCT_IF_C Ui_BFu0s_S lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_S)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_S.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_S, Ui_BFu0s_S)
//============================================================================


struct  Ui_BFu0s_Uc  {
  unsigned int v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Ui_BFu0s_Uc) C1{ Fi Fs:0 Fc}



static void Test_Ui_BFu0s_Uc()
{
  {
    init_simple_test("Ui_BFu0s_Uc");
    static STRUCT_IF_C Ui_BFu0s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_Uc, Ui_BFu0s_Uc)
//============================================================================


struct  Ui_BFu0s_Ui  {
  unsigned int v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Ui_BFu0s_Ui) C1{ Fi Fs:0 Fi}



static void Test_Ui_BFu0s_Ui()
{
  {
    init_simple_test("Ui_BFu0s_Ui");
    static STRUCT_IF_C Ui_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_Ui, Ui_BFu0s_Ui)
//============================================================================


struct  Ui_BFu0s_Ul  {
  unsigned int v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Ui_BFu0s_Ul) C1{ Fi Fs:0 FL}



static void Test_Ui_BFu0s_Ul()
{
  {
    init_simple_test("Ui_BFu0s_Ul");
    static STRUCT_IF_C Ui_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_Ul, Ui_BFu0s_Ul)
//============================================================================


struct  Ui_BFu0s_Us  {
  unsigned int v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Ui_BFu0s_Us) C1{ Fi Fs:0 Fs}



static void Test_Ui_BFu0s_Us()
{
  {
    init_simple_test("Ui_BFu0s_Us");
    static STRUCT_IF_C Ui_BFu0s_Us lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu0s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Us.v1");
    check_field_offset(lv, v2, 4, "Ui_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_Us, Ui_BFu0s_Us)
//============================================================================


struct  Ui_BFu0s_Vp  {
  unsigned int v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Ui_BFu0s_Vp) C1{ Fi Fs:0 Fp}



static void Test_Ui_BFu0s_Vp()
{
  {
    init_simple_test("Ui_BFu0s_Vp");
    static STRUCT_IF_C Ui_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Ui_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu0s_Vp, Ui_BFu0s_Vp)
//============================================================================


struct  Ui_BFu15i_BFu0c  {
  unsigned int v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Ui_BFu15i_BFu0c) C1{ Fi Fi:15 Fc:0}



static void Test_Ui_BFu15i_BFu0c()
{
  {
    init_simple_test("Ui_BFu15i_BFu0c");
    static STRUCT_IF_C Ui_BFu15i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15i_BFu0c, Ui_BFu15i_BFu0c)
//============================================================================


struct  Ui_BFu15i_BFu0i  {
  unsigned int v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Ui_BFu15i_BFu0i) C1{ Fi Fi:15 Fi:0}



static void Test_Ui_BFu15i_BFu0i()
{
  {
    init_simple_test("Ui_BFu15i_BFu0i");
    static STRUCT_IF_C Ui_BFu15i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15i_BFu0i, Ui_BFu15i_BFu0i)
//============================================================================


struct  Ui_BFu15i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Ui_BFu15i_BFu0ll) C1{ Fi Fi:15 FL:0}



static void Test_Ui_BFu15i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu15i_BFu0ll");
    static STRUCT_IF_C Ui_BFu15i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15i_BFu0ll, Ui_BFu15i_BFu0ll)
//============================================================================


struct  Ui_BFu15i_BFu0s  {
  unsigned int v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Ui_BFu15i_BFu0s) C1{ Fi Fi:15 Fs:0}



static void Test_Ui_BFu15i_BFu0s()
{
  {
    init_simple_test("Ui_BFu15i_BFu0s");
    static STRUCT_IF_C Ui_BFu15i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15i_BFu0s, Ui_BFu15i_BFu0s)
//============================================================================


struct  Ui_BFu15ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Ui_BFu15ll_BFu0c) C1{ Fi FL:15 Fc:0}



static void Test_Ui_BFu15ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0c");
    static STRUCT_IF_C Ui_BFu15ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15ll_BFu0c, Ui_BFu15ll_BFu0c)
//============================================================================


struct  Ui_BFu15ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Ui_BFu15ll_BFu0i) C1{ Fi FL:15 Fi:0}



static void Test_Ui_BFu15ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0i");
    static STRUCT_IF_C Ui_BFu15ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15ll_BFu0i, Ui_BFu15ll_BFu0i)
//============================================================================


struct  Ui_BFu15ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Ui_BFu15ll_BFu0ll) C1{ Fi FL:15 FL:0}



static void Test_Ui_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15ll_BFu0ll, Ui_BFu15ll_BFu0ll)
//============================================================================


struct  Ui_BFu15ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Ui_BFu15ll_BFu0s) C1{ Fi FL:15 Fs:0}



static void Test_Ui_BFu15ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu15ll_BFu0s");
    static STRUCT_IF_C Ui_BFu15ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15ll_BFu0s, Ui_BFu15ll_BFu0s)
//============================================================================


struct  Ui_BFu15s_BFu0c  {
  unsigned int v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Ui_BFu15s_BFu0c) C1{ Fi Fs:15 Fc:0}



static void Test_Ui_BFu15s_BFu0c()
{
  {
    init_simple_test("Ui_BFu15s_BFu0c");
    static STRUCT_IF_C Ui_BFu15s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15s_BFu0c, Ui_BFu15s_BFu0c)
//============================================================================


struct  Ui_BFu15s_BFu0i  {
  unsigned int v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Ui_BFu15s_BFu0i) C1{ Fi Fs:15 Fi:0}



static void Test_Ui_BFu15s_BFu0i()
{
  {
    init_simple_test("Ui_BFu15s_BFu0i");
    static STRUCT_IF_C Ui_BFu15s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15s_BFu0i, Ui_BFu15s_BFu0i)
//============================================================================


struct  Ui_BFu15s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Ui_BFu15s_BFu0ll) C1{ Fi Fs:15 FL:0}



static void Test_Ui_BFu15s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu15s_BFu0ll");
    static STRUCT_IF_C Ui_BFu15s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15s_BFu0ll, Ui_BFu15s_BFu0ll)
//============================================================================


struct  Ui_BFu15s_BFu0s  {
  unsigned int v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Ui_BFu15s_BFu0s) C1{ Fi Fs:15 Fs:0}



static void Test_Ui_BFu15s_BFu0s()
{
  {
    init_simple_test("Ui_BFu15s_BFu0s");
    static STRUCT_IF_C Ui_BFu15s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu15s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Ui_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Ui_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu15s_BFu0s, Ui_BFu15s_BFu0s)
//============================================================================


struct  Ui_BFu16i_BFu0c  {
  unsigned int v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Ui_BFu16i_BFu0c) C1{ Fi Fi:16 Fc:0}



static void Test_Ui_BFu16i_BFu0c()
{
  {
    init_simple_test("Ui_BFu16i_BFu0c");
    static STRUCT_IF_C Ui_BFu16i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16i_BFu0c, Ui_BFu16i_BFu0c)
//============================================================================


struct  Ui_BFu16i_BFu0i  {
  unsigned int v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Ui_BFu16i_BFu0i) C1{ Fi Fi:16 Fi:0}



static void Test_Ui_BFu16i_BFu0i()
{
  {
    init_simple_test("Ui_BFu16i_BFu0i");
    static STRUCT_IF_C Ui_BFu16i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16i_BFu0i, Ui_BFu16i_BFu0i)
//============================================================================


struct  Ui_BFu16i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Ui_BFu16i_BFu0ll) C1{ Fi Fi:16 FL:0}



static void Test_Ui_BFu16i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu16i_BFu0ll");
    static STRUCT_IF_C Ui_BFu16i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16i_BFu0ll, Ui_BFu16i_BFu0ll)
//============================================================================


struct  Ui_BFu16i_BFu0s  {
  unsigned int v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Ui_BFu16i_BFu0s) C1{ Fi Fi:16 Fs:0}



static void Test_Ui_BFu16i_BFu0s()
{
  {
    init_simple_test("Ui_BFu16i_BFu0s");
    static STRUCT_IF_C Ui_BFu16i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16i_BFu0s, Ui_BFu16i_BFu0s)
//============================================================================


struct  Ui_BFu16ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Ui_BFu16ll_BFu0c) C1{ Fi FL:16 Fc:0}



static void Test_Ui_BFu16ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0c");
    static STRUCT_IF_C Ui_BFu16ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16ll_BFu0c, Ui_BFu16ll_BFu0c)
//============================================================================


struct  Ui_BFu16ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Ui_BFu16ll_BFu0i) C1{ Fi FL:16 Fi:0}



static void Test_Ui_BFu16ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0i");
    static STRUCT_IF_C Ui_BFu16ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16ll_BFu0i, Ui_BFu16ll_BFu0i)
//============================================================================


struct  Ui_BFu16ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Ui_BFu16ll_BFu0ll) C1{ Fi FL:16 FL:0}



static void Test_Ui_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16ll_BFu0ll, Ui_BFu16ll_BFu0ll)
//============================================================================


struct  Ui_BFu16ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Ui_BFu16ll_BFu0s) C1{ Fi FL:16 Fs:0}



static void Test_Ui_BFu16ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu16ll_BFu0s");
    static STRUCT_IF_C Ui_BFu16ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16ll_BFu0s, Ui_BFu16ll_BFu0s)
//============================================================================


struct  Ui_BFu16s_BFu0c  {
  unsigned int v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Ui_BFu16s_BFu0c) C1{ Fi Fs:16 Fc:0}



static void Test_Ui_BFu16s_BFu0c()
{
  {
    init_simple_test("Ui_BFu16s_BFu0c");
    static STRUCT_IF_C Ui_BFu16s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16s_BFu0c, Ui_BFu16s_BFu0c)
//============================================================================


struct  Ui_BFu16s_BFu0i  {
  unsigned int v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Ui_BFu16s_BFu0i) C1{ Fi Fs:16 Fi:0}



static void Test_Ui_BFu16s_BFu0i()
{
  {
    init_simple_test("Ui_BFu16s_BFu0i");
    static STRUCT_IF_C Ui_BFu16s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16s_BFu0i, Ui_BFu16s_BFu0i)
//============================================================================


struct  Ui_BFu16s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Ui_BFu16s_BFu0ll) C1{ Fi Fs:16 FL:0}



static void Test_Ui_BFu16s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu16s_BFu0ll");
    static STRUCT_IF_C Ui_BFu16s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16s_BFu0ll, Ui_BFu16s_BFu0ll)
//============================================================================


struct  Ui_BFu16s_BFu0s  {
  unsigned int v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Ui_BFu16s_BFu0s) C1{ Fi Fs:16 Fs:0}



static void Test_Ui_BFu16s_BFu0s()
{
  {
    init_simple_test("Ui_BFu16s_BFu0s");
    static STRUCT_IF_C Ui_BFu16s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu16s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Ui_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Ui_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu16s_BFu0s, Ui_BFu16s_BFu0s)
//============================================================================


struct  Ui_BFu17i_BFu0c  {
  unsigned int v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Ui_BFu17i_BFu0c) C1{ Fi Fi:17 Fc:0}



static void Test_Ui_BFu17i_BFu0c()
{
  {
    init_simple_test("Ui_BFu17i_BFu0c");
    static STRUCT_IF_C Ui_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17i_BFu0c, Ui_BFu17i_BFu0c)
//============================================================================


struct  Ui_BFu17i_BFu0i  {
  unsigned int v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Ui_BFu17i_BFu0i) C1{ Fi Fi:17 Fi:0}



static void Test_Ui_BFu17i_BFu0i()
{
  {
    init_simple_test("Ui_BFu17i_BFu0i");
    static STRUCT_IF_C Ui_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17i_BFu0i, Ui_BFu17i_BFu0i)
//============================================================================


struct  Ui_BFu17i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Ui_BFu17i_BFu0ll) C1{ Fi Fi:17 FL:0}



static void Test_Ui_BFu17i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu17i_BFu0ll");
    static STRUCT_IF_C Ui_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17i_BFu0ll, Ui_BFu17i_BFu0ll)
//============================================================================


struct  Ui_BFu17i_BFu0s  {
  unsigned int v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Ui_BFu17i_BFu0s) C1{ Fi Fi:17 Fs:0}



static void Test_Ui_BFu17i_BFu0s()
{
  {
    init_simple_test("Ui_BFu17i_BFu0s");
    static STRUCT_IF_C Ui_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17i_BFu0s, Ui_BFu17i_BFu0s)
//============================================================================


struct  Ui_BFu17ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Ui_BFu17ll_BFu0c) C1{ Fi FL:17 Fc:0}



static void Test_Ui_BFu17ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0c");
    static STRUCT_IF_C Ui_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17ll_BFu0c, Ui_BFu17ll_BFu0c)
//============================================================================


struct  Ui_BFu17ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Ui_BFu17ll_BFu0i) C1{ Fi FL:17 Fi:0}



static void Test_Ui_BFu17ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0i");
    static STRUCT_IF_C Ui_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17ll_BFu0i, Ui_BFu17ll_BFu0i)
//============================================================================


struct  Ui_BFu17ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Ui_BFu17ll_BFu0ll) C1{ Fi FL:17 FL:0}



static void Test_Ui_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17ll_BFu0ll, Ui_BFu17ll_BFu0ll)
//============================================================================


struct  Ui_BFu17ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Ui_BFu17ll_BFu0s) C1{ Fi FL:17 Fs:0}



static void Test_Ui_BFu17ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu17ll_BFu0s");
    static STRUCT_IF_C Ui_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Ui_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Ui_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu17ll_BFu0s, Ui_BFu17ll_BFu0s)
//============================================================================


struct  Ui_BFu1c_BFu0c  {
  unsigned int v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1c_BFu0c) C1{ Fi Fc:1 Fc:0}



static void Test_Ui_BFu1c_BFu0c()
{
  {
    init_simple_test("Ui_BFu1c_BFu0c");
    static STRUCT_IF_C Ui_BFu1c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1c_BFu0c, Ui_BFu1c_BFu0c)
//============================================================================


struct  Ui_BFu1c_BFu0i  {
  unsigned int v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1c_BFu0i) C1{ Fi Fc:1 Fi:0}



static void Test_Ui_BFu1c_BFu0i()
{
  {
    init_simple_test("Ui_BFu1c_BFu0i");
    static STRUCT_IF_C Ui_BFu1c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1c_BFu0i, Ui_BFu1c_BFu0i)
//============================================================================


struct  Ui_BFu1c_BFu0ll  {
  unsigned int v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1c_BFu0ll) C1{ Fi Fc:1 FL:0}



static void Test_Ui_BFu1c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1c_BFu0ll");
    static STRUCT_IF_C Ui_BFu1c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1c_BFu0ll, Ui_BFu1c_BFu0ll)
//============================================================================


struct  Ui_BFu1c_BFu0s  {
  unsigned int v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1c_BFu0s) C1{ Fi Fc:1 Fs:0}



static void Test_Ui_BFu1c_BFu0s()
{
  {
    init_simple_test("Ui_BFu1c_BFu0s");
    static STRUCT_IF_C Ui_BFu1c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1c_BFu0s, Ui_BFu1c_BFu0s)
//============================================================================


struct  Ui_BFu1i_BFu0c  {
  unsigned int v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1i_BFu0c) C1{ Fi Fi:1 Fc:0}



static void Test_Ui_BFu1i_BFu0c()
{
  {
    init_simple_test("Ui_BFu1i_BFu0c");
    static STRUCT_IF_C Ui_BFu1i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1i_BFu0c, Ui_BFu1i_BFu0c)
//============================================================================


struct  Ui_BFu1i_BFu0i  {
  unsigned int v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1i_BFu0i) C1{ Fi Fi:1 Fi:0}



static void Test_Ui_BFu1i_BFu0i()
{
  {
    init_simple_test("Ui_BFu1i_BFu0i");
    static STRUCT_IF_C Ui_BFu1i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1i_BFu0i, Ui_BFu1i_BFu0i)
//============================================================================


struct  Ui_BFu1i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1i_BFu0ll) C1{ Fi Fi:1 FL:0}



static void Test_Ui_BFu1i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1i_BFu0ll");
    static STRUCT_IF_C Ui_BFu1i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1i_BFu0ll, Ui_BFu1i_BFu0ll)
//============================================================================


struct  Ui_BFu1i_BFu0s  {
  unsigned int v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1i_BFu0s) C1{ Fi Fi:1 Fs:0}



static void Test_Ui_BFu1i_BFu0s()
{
  {
    init_simple_test("Ui_BFu1i_BFu0s");
    static STRUCT_IF_C Ui_BFu1i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1i_BFu0s, Ui_BFu1i_BFu0s)
//============================================================================


struct  Ui_BFu1ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1ll_BFu0c) C1{ Fi FL:1 Fc:0}



static void Test_Ui_BFu1ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0c");
    static STRUCT_IF_C Ui_BFu1ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1ll_BFu0c, Ui_BFu1ll_BFu0c)
//============================================================================


struct  Ui_BFu1ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1ll_BFu0i) C1{ Fi FL:1 Fi:0}



static void Test_Ui_BFu1ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0i");
    static STRUCT_IF_C Ui_BFu1ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1ll_BFu0i, Ui_BFu1ll_BFu0i)
//============================================================================


struct  Ui_BFu1ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1ll_BFu0ll) C1{ Fi FL:1 FL:0}



static void Test_Ui_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1ll_BFu0ll, Ui_BFu1ll_BFu0ll)
//============================================================================


struct  Ui_BFu1ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1ll_BFu0s) C1{ Fi FL:1 Fs:0}



static void Test_Ui_BFu1ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu1ll_BFu0s");
    static STRUCT_IF_C Ui_BFu1ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1ll_BFu0s, Ui_BFu1ll_BFu0s)
//============================================================================


struct  Ui_BFu1s_BFu0c  {
  unsigned int v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Ui_BFu1s_BFu0c) C1{ Fi Fs:1 Fc:0}



static void Test_Ui_BFu1s_BFu0c()
{
  {
    init_simple_test("Ui_BFu1s_BFu0c");
    static STRUCT_IF_C Ui_BFu1s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1s_BFu0c, Ui_BFu1s_BFu0c)
//============================================================================


struct  Ui_BFu1s_BFu0i  {
  unsigned int v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Ui_BFu1s_BFu0i) C1{ Fi Fs:1 Fi:0}



static void Test_Ui_BFu1s_BFu0i()
{
  {
    init_simple_test("Ui_BFu1s_BFu0i");
    static STRUCT_IF_C Ui_BFu1s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1s_BFu0i, Ui_BFu1s_BFu0i)
//============================================================================


struct  Ui_BFu1s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Ui_BFu1s_BFu0ll) C1{ Fi Fs:1 FL:0}



static void Test_Ui_BFu1s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu1s_BFu0ll");
    static STRUCT_IF_C Ui_BFu1s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1s_BFu0ll, Ui_BFu1s_BFu0ll)
//============================================================================


struct  Ui_BFu1s_BFu0s  {
  unsigned int v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Ui_BFu1s_BFu0s) C1{ Fi Fs:1 Fs:0}



static void Test_Ui_BFu1s_BFu0s()
{
  {
    init_simple_test("Ui_BFu1s_BFu0s");
    static STRUCT_IF_C Ui_BFu1s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu1s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Ui_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu1s_BFu0s, Ui_BFu1s_BFu0s)
//============================================================================


struct  Ui_BFu31i_BFu0c  {
  unsigned int v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Ui_BFu31i_BFu0c) C1{ Fi Fi:31 Fc:0}



static void Test_Ui_BFu31i_BFu0c()
{
  {
    init_simple_test("Ui_BFu31i_BFu0c");
    static STRUCT_IF_C Ui_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31i_BFu0c, Ui_BFu31i_BFu0c)
//============================================================================


struct  Ui_BFu31i_BFu0i  {
  unsigned int v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Ui_BFu31i_BFu0i) C1{ Fi Fi:31 Fi:0}



static void Test_Ui_BFu31i_BFu0i()
{
  {
    init_simple_test("Ui_BFu31i_BFu0i");
    static STRUCT_IF_C Ui_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31i_BFu0i, Ui_BFu31i_BFu0i)
//============================================================================


struct  Ui_BFu31i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Ui_BFu31i_BFu0ll) C1{ Fi Fi:31 FL:0}



static void Test_Ui_BFu31i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu31i_BFu0ll");
    static STRUCT_IF_C Ui_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31i_BFu0ll, Ui_BFu31i_BFu0ll)
//============================================================================


struct  Ui_BFu31i_BFu0s  {
  unsigned int v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Ui_BFu31i_BFu0s) C1{ Fi Fi:31 Fs:0}



static void Test_Ui_BFu31i_BFu0s()
{
  {
    init_simple_test("Ui_BFu31i_BFu0s");
    static STRUCT_IF_C Ui_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31i_BFu0s, Ui_BFu31i_BFu0s)
//============================================================================


struct  Ui_BFu31ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Ui_BFu31ll_BFu0c) C1{ Fi FL:31 Fc:0}



static void Test_Ui_BFu31ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0c");
    static STRUCT_IF_C Ui_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31ll_BFu0c, Ui_BFu31ll_BFu0c)
//============================================================================


struct  Ui_BFu31ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Ui_BFu31ll_BFu0i) C1{ Fi FL:31 Fi:0}



static void Test_Ui_BFu31ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0i");
    static STRUCT_IF_C Ui_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31ll_BFu0i, Ui_BFu31ll_BFu0i)
//============================================================================


struct  Ui_BFu31ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Ui_BFu31ll_BFu0ll) C1{ Fi FL:31 FL:0}



static void Test_Ui_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31ll_BFu0ll, Ui_BFu31ll_BFu0ll)
//============================================================================


struct  Ui_BFu31ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Ui_BFu31ll_BFu0s) C1{ Fi FL:31 Fs:0}



static void Test_Ui_BFu31ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu31ll_BFu0s");
    static STRUCT_IF_C Ui_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Ui_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Ui_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu31ll_BFu0s, Ui_BFu31ll_BFu0s)
//============================================================================


struct  Ui_BFu32i_BFu0c  {
  unsigned int v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Ui_BFu32i_BFu0c) C1{ Fi Fi:32 Fc:0}



static void Test_Ui_BFu32i_BFu0c()
{
  {
    init_simple_test("Ui_BFu32i_BFu0c");
    static STRUCT_IF_C Ui_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32i_BFu0c, Ui_BFu32i_BFu0c)
//============================================================================


struct  Ui_BFu32i_BFu0i  {
  unsigned int v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Ui_BFu32i_BFu0i) C1{ Fi Fi:32 Fi:0}



static void Test_Ui_BFu32i_BFu0i()
{
  {
    init_simple_test("Ui_BFu32i_BFu0i");
    static STRUCT_IF_C Ui_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32i_BFu0i, Ui_BFu32i_BFu0i)
//============================================================================


struct  Ui_BFu32i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Ui_BFu32i_BFu0ll) C1{ Fi Fi:32 FL:0}



static void Test_Ui_BFu32i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu32i_BFu0ll");
    static STRUCT_IF_C Ui_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32i_BFu0ll, Ui_BFu32i_BFu0ll)
//============================================================================


struct  Ui_BFu32i_BFu0s  {
  unsigned int v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Ui_BFu32i_BFu0s) C1{ Fi Fi:32 Fs:0}



static void Test_Ui_BFu32i_BFu0s()
{
  {
    init_simple_test("Ui_BFu32i_BFu0s");
    static STRUCT_IF_C Ui_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32i_BFu0s, Ui_BFu32i_BFu0s)
//============================================================================


struct  Ui_BFu32ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Ui_BFu32ll_BFu0c) C1{ Fi FL:32 Fc:0}



static void Test_Ui_BFu32ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0c");
    static STRUCT_IF_C Ui_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32ll_BFu0c, Ui_BFu32ll_BFu0c)
//============================================================================


struct  Ui_BFu32ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Ui_BFu32ll_BFu0i) C1{ Fi FL:32 Fi:0}



static void Test_Ui_BFu32ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0i");
    static STRUCT_IF_C Ui_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32ll_BFu0i, Ui_BFu32ll_BFu0i)
//============================================================================


struct  Ui_BFu32ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Ui_BFu32ll_BFu0ll) C1{ Fi FL:32 FL:0}



static void Test_Ui_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32ll_BFu0ll, Ui_BFu32ll_BFu0ll)
//============================================================================


struct  Ui_BFu32ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Ui_BFu32ll_BFu0s) C1{ Fi FL:32 Fs:0}



static void Test_Ui_BFu32ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu32ll_BFu0s");
    static STRUCT_IF_C Ui_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Ui_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Ui_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu32ll_BFu0s, Ui_BFu32ll_BFu0s)
//============================================================================


struct  Ui_BFu33_BFu0c  {
  unsigned int v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Ui_BFu33_BFu0c) C1{ Fi FL:33 Fc:0}



static void Test_Ui_BFu33_BFu0c()
{
  {
    init_simple_test("Ui_BFu33_BFu0c");
    static STRUCT_IF_C Ui_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu33_BFu0c, Ui_BFu33_BFu0c)
//============================================================================


struct  Ui_BFu33_BFu0i  {
  unsigned int v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Ui_BFu33_BFu0i) C1{ Fi FL:33 Fi:0}



static void Test_Ui_BFu33_BFu0i()
{
  {
    init_simple_test("Ui_BFu33_BFu0i");
    static STRUCT_IF_C Ui_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu33_BFu0i, Ui_BFu33_BFu0i)
//============================================================================


struct  Ui_BFu33_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Ui_BFu33_BFu0ll) C1{ Fi FL:33 FL:0}



static void Test_Ui_BFu33_BFu0ll()
{
  {
    init_simple_test("Ui_BFu33_BFu0ll");
    static STRUCT_IF_C Ui_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu33_BFu0ll, Ui_BFu33_BFu0ll)
//============================================================================


struct  Ui_BFu33_BFu0s  {
  unsigned int v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Ui_BFu33_BFu0s) C1{ Fi FL:33 Fs:0}



static void Test_Ui_BFu33_BFu0s()
{
  {
    init_simple_test("Ui_BFu33_BFu0s");
    static STRUCT_IF_C Ui_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ui_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ui_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu33_BFu0s, Ui_BFu33_BFu0s)
//============================================================================


struct  Ui_BFu7c_BFu0c  {
  unsigned int v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7c_BFu0c) C1{ Fi Fc:7 Fc:0}



static void Test_Ui_BFu7c_BFu0c()
{
  {
    init_simple_test("Ui_BFu7c_BFu0c");
    static STRUCT_IF_C Ui_BFu7c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7c_BFu0c, Ui_BFu7c_BFu0c)
//============================================================================


struct  Ui_BFu7c_BFu0i  {
  unsigned int v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7c_BFu0i) C1{ Fi Fc:7 Fi:0}



static void Test_Ui_BFu7c_BFu0i()
{
  {
    init_simple_test("Ui_BFu7c_BFu0i");
    static STRUCT_IF_C Ui_BFu7c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7c_BFu0i, Ui_BFu7c_BFu0i)
//============================================================================


struct  Ui_BFu7c_BFu0ll  {
  unsigned int v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7c_BFu0ll) C1{ Fi Fc:7 FL:0}



static void Test_Ui_BFu7c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7c_BFu0ll");
    static STRUCT_IF_C Ui_BFu7c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7c_BFu0ll, Ui_BFu7c_BFu0ll)
//============================================================================


struct  Ui_BFu7c_BFu0s  {
  unsigned int v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7c_BFu0s) C1{ Fi Fc:7 Fs:0}



static void Test_Ui_BFu7c_BFu0s()
{
  {
    init_simple_test("Ui_BFu7c_BFu0s");
    static STRUCT_IF_C Ui_BFu7c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7c_BFu0s, Ui_BFu7c_BFu0s)
//============================================================================


struct  Ui_BFu7i_BFu0c  {
  unsigned int v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7i_BFu0c) C1{ Fi Fi:7 Fc:0}



static void Test_Ui_BFu7i_BFu0c()
{
  {
    init_simple_test("Ui_BFu7i_BFu0c");
    static STRUCT_IF_C Ui_BFu7i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7i_BFu0c, Ui_BFu7i_BFu0c)
//============================================================================


struct  Ui_BFu7i_BFu0i  {
  unsigned int v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7i_BFu0i) C1{ Fi Fi:7 Fi:0}



static void Test_Ui_BFu7i_BFu0i()
{
  {
    init_simple_test("Ui_BFu7i_BFu0i");
    static STRUCT_IF_C Ui_BFu7i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7i_BFu0i, Ui_BFu7i_BFu0i)
//============================================================================


struct  Ui_BFu7i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7i_BFu0ll) C1{ Fi Fi:7 FL:0}



static void Test_Ui_BFu7i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7i_BFu0ll");
    static STRUCT_IF_C Ui_BFu7i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7i_BFu0ll, Ui_BFu7i_BFu0ll)
//============================================================================


struct  Ui_BFu7i_BFu0s  {
  unsigned int v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7i_BFu0s) C1{ Fi Fi:7 Fs:0}



static void Test_Ui_BFu7i_BFu0s()
{
  {
    init_simple_test("Ui_BFu7i_BFu0s");
    static STRUCT_IF_C Ui_BFu7i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7i_BFu0s, Ui_BFu7i_BFu0s)
//============================================================================


struct  Ui_BFu7ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7ll_BFu0c) C1{ Fi FL:7 Fc:0}



static void Test_Ui_BFu7ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0c");
    static STRUCT_IF_C Ui_BFu7ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7ll_BFu0c, Ui_BFu7ll_BFu0c)
//============================================================================


struct  Ui_BFu7ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7ll_BFu0i) C1{ Fi FL:7 Fi:0}



static void Test_Ui_BFu7ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0i");
    static STRUCT_IF_C Ui_BFu7ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7ll_BFu0i, Ui_BFu7ll_BFu0i)
//============================================================================


struct  Ui_BFu7ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7ll_BFu0ll) C1{ Fi FL:7 FL:0}



static void Test_Ui_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7ll_BFu0ll, Ui_BFu7ll_BFu0ll)
//============================================================================


struct  Ui_BFu7ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7ll_BFu0s) C1{ Fi FL:7 Fs:0}



static void Test_Ui_BFu7ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu7ll_BFu0s");
    static STRUCT_IF_C Ui_BFu7ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7ll_BFu0s, Ui_BFu7ll_BFu0s)
//============================================================================


struct  Ui_BFu7s_BFu0c  {
  unsigned int v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Ui_BFu7s_BFu0c) C1{ Fi Fs:7 Fc:0}



static void Test_Ui_BFu7s_BFu0c()
{
  {
    init_simple_test("Ui_BFu7s_BFu0c");
    static STRUCT_IF_C Ui_BFu7s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7s_BFu0c, Ui_BFu7s_BFu0c)
//============================================================================


struct  Ui_BFu7s_BFu0i  {
  unsigned int v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Ui_BFu7s_BFu0i) C1{ Fi Fs:7 Fi:0}



static void Test_Ui_BFu7s_BFu0i()
{
  {
    init_simple_test("Ui_BFu7s_BFu0i");
    static STRUCT_IF_C Ui_BFu7s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7s_BFu0i, Ui_BFu7s_BFu0i)
//============================================================================


struct  Ui_BFu7s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Ui_BFu7s_BFu0ll) C1{ Fi Fs:7 FL:0}



static void Test_Ui_BFu7s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu7s_BFu0ll");
    static STRUCT_IF_C Ui_BFu7s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7s_BFu0ll, Ui_BFu7s_BFu0ll)
//============================================================================


struct  Ui_BFu7s_BFu0s  {
  unsigned int v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Ui_BFu7s_BFu0s) C1{ Fi Fs:7 Fs:0}



static void Test_Ui_BFu7s_BFu0s()
{
  {
    init_simple_test("Ui_BFu7s_BFu0s");
    static STRUCT_IF_C Ui_BFu7s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu7s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Ui_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Ui_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu7s_BFu0s, Ui_BFu7s_BFu0s)
//============================================================================


struct  Ui_BFu8c_BFu0c  {
  unsigned int v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8c_BFu0c) C1{ Fi Fc:8 Fc:0}



static void Test_Ui_BFu8c_BFu0c()
{
  {
    init_simple_test("Ui_BFu8c_BFu0c");
    static STRUCT_IF_C Ui_BFu8c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8c_BFu0c, Ui_BFu8c_BFu0c)
//============================================================================


struct  Ui_BFu8c_BFu0i  {
  unsigned int v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8c_BFu0i) C1{ Fi Fc:8 Fi:0}



static void Test_Ui_BFu8c_BFu0i()
{
  {
    init_simple_test("Ui_BFu8c_BFu0i");
    static STRUCT_IF_C Ui_BFu8c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8c_BFu0i, Ui_BFu8c_BFu0i)
//============================================================================


struct  Ui_BFu8c_BFu0ll  {
  unsigned int v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8c_BFu0ll) C1{ Fi Fc:8 FL:0}



static void Test_Ui_BFu8c_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8c_BFu0ll");
    static STRUCT_IF_C Ui_BFu8c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8c_BFu0ll, Ui_BFu8c_BFu0ll)
//============================================================================


struct  Ui_BFu8c_BFu0s  {
  unsigned int v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8c_BFu0s) C1{ Fi Fc:8 Fs:0}



static void Test_Ui_BFu8c_BFu0s()
{
  {
    init_simple_test("Ui_BFu8c_BFu0s");
    static STRUCT_IF_C Ui_BFu8c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8c_BFu0s, Ui_BFu8c_BFu0s)
//============================================================================


struct  Ui_BFu8i_BFu0c  {
  unsigned int v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8i_BFu0c) C1{ Fi Fi:8 Fc:0}



static void Test_Ui_BFu8i_BFu0c()
{
  {
    init_simple_test("Ui_BFu8i_BFu0c");
    static STRUCT_IF_C Ui_BFu8i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8i_BFu0c, Ui_BFu8i_BFu0c)
//============================================================================


struct  Ui_BFu8i_BFu0i  {
  unsigned int v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8i_BFu0i) C1{ Fi Fi:8 Fi:0}



static void Test_Ui_BFu8i_BFu0i()
{
  {
    init_simple_test("Ui_BFu8i_BFu0i");
    static STRUCT_IF_C Ui_BFu8i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8i_BFu0i, Ui_BFu8i_BFu0i)
//============================================================================


struct  Ui_BFu8i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8i_BFu0ll) C1{ Fi Fi:8 FL:0}



static void Test_Ui_BFu8i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8i_BFu0ll");
    static STRUCT_IF_C Ui_BFu8i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8i_BFu0ll, Ui_BFu8i_BFu0ll)
//============================================================================


struct  Ui_BFu8i_BFu0s  {
  unsigned int v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8i_BFu0s) C1{ Fi Fi:8 Fs:0}



static void Test_Ui_BFu8i_BFu0s()
{
  {
    init_simple_test("Ui_BFu8i_BFu0s");
    static STRUCT_IF_C Ui_BFu8i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8i_BFu0s, Ui_BFu8i_BFu0s)
//============================================================================


struct  Ui_BFu8ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8ll_BFu0c) C1{ Fi FL:8 Fc:0}



static void Test_Ui_BFu8ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0c");
    static STRUCT_IF_C Ui_BFu8ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8ll_BFu0c, Ui_BFu8ll_BFu0c)
//============================================================================


struct  Ui_BFu8ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8ll_BFu0i) C1{ Fi FL:8 Fi:0}



static void Test_Ui_BFu8ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0i");
    static STRUCT_IF_C Ui_BFu8ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8ll_BFu0i, Ui_BFu8ll_BFu0i)
//============================================================================


struct  Ui_BFu8ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8ll_BFu0ll) C1{ Fi FL:8 FL:0}



static void Test_Ui_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8ll_BFu0ll, Ui_BFu8ll_BFu0ll)
//============================================================================


struct  Ui_BFu8ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8ll_BFu0s) C1{ Fi FL:8 Fs:0}



static void Test_Ui_BFu8ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu8ll_BFu0s");
    static STRUCT_IF_C Ui_BFu8ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8ll_BFu0s, Ui_BFu8ll_BFu0s)
//============================================================================


struct  Ui_BFu8s_BFu0c  {
  unsigned int v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Ui_BFu8s_BFu0c) C1{ Fi Fs:8 Fc:0}



static void Test_Ui_BFu8s_BFu0c()
{
  {
    init_simple_test("Ui_BFu8s_BFu0c");
    static STRUCT_IF_C Ui_BFu8s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8s_BFu0c, Ui_BFu8s_BFu0c)
//============================================================================


struct  Ui_BFu8s_BFu0i  {
  unsigned int v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Ui_BFu8s_BFu0i) C1{ Fi Fs:8 Fi:0}



static void Test_Ui_BFu8s_BFu0i()
{
  {
    init_simple_test("Ui_BFu8s_BFu0i");
    static STRUCT_IF_C Ui_BFu8s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8s_BFu0i, Ui_BFu8s_BFu0i)
//============================================================================


struct  Ui_BFu8s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Ui_BFu8s_BFu0ll) C1{ Fi Fs:8 FL:0}



static void Test_Ui_BFu8s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu8s_BFu0ll");
    static STRUCT_IF_C Ui_BFu8s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8s_BFu0ll, Ui_BFu8s_BFu0ll)
//============================================================================


struct  Ui_BFu8s_BFu0s  {
  unsigned int v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Ui_BFu8s_BFu0s) C1{ Fi Fs:8 Fs:0}



static void Test_Ui_BFu8s_BFu0s()
{
  {
    init_simple_test("Ui_BFu8s_BFu0s");
    static STRUCT_IF_C Ui_BFu8s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu8s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Ui_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Ui_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu8s_BFu0s, Ui_BFu8s_BFu0s)
//============================================================================


struct  Ui_BFu9i_BFu0c  {
  unsigned int v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Ui_BFu9i_BFu0c) C1{ Fi Fi:9 Fc:0}



static void Test_Ui_BFu9i_BFu0c()
{
  {
    init_simple_test("Ui_BFu9i_BFu0c");
    static STRUCT_IF_C Ui_BFu9i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9i_BFu0c, Ui_BFu9i_BFu0c)
//============================================================================


struct  Ui_BFu9i_BFu0i  {
  unsigned int v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Ui_BFu9i_BFu0i) C1{ Fi Fi:9 Fi:0}



static void Test_Ui_BFu9i_BFu0i()
{
  {
    init_simple_test("Ui_BFu9i_BFu0i");
    static STRUCT_IF_C Ui_BFu9i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9i_BFu0i, Ui_BFu9i_BFu0i)
//============================================================================


struct  Ui_BFu9i_BFu0ll  {
  unsigned int v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Ui_BFu9i_BFu0ll) C1{ Fi Fi:9 FL:0}



static void Test_Ui_BFu9i_BFu0ll()
{
  {
    init_simple_test("Ui_BFu9i_BFu0ll");
    static STRUCT_IF_C Ui_BFu9i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9i_BFu0ll, Ui_BFu9i_BFu0ll)
//============================================================================


struct  Ui_BFu9i_BFu0s  {
  unsigned int v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Ui_BFu9i_BFu0s) C1{ Fi Fi:9 Fs:0}



static void Test_Ui_BFu9i_BFu0s()
{
  {
    init_simple_test("Ui_BFu9i_BFu0s");
    static STRUCT_IF_C Ui_BFu9i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9i_BFu0s, Ui_BFu9i_BFu0s)
//============================================================================


struct  Ui_BFu9ll_BFu0c  {
  unsigned int v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Ui_BFu9ll_BFu0c) C1{ Fi FL:9 Fc:0}



static void Test_Ui_BFu9ll_BFu0c()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0c");
    static STRUCT_IF_C Ui_BFu9ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9ll_BFu0c, Ui_BFu9ll_BFu0c)
//============================================================================


struct  Ui_BFu9ll_BFu0i  {
  unsigned int v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Ui_BFu9ll_BFu0i) C1{ Fi FL:9 Fi:0}



static void Test_Ui_BFu9ll_BFu0i()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0i");
    static STRUCT_IF_C Ui_BFu9ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9ll_BFu0i, Ui_BFu9ll_BFu0i)
//============================================================================


struct  Ui_BFu9ll_BFu0ll  {
  unsigned int v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Ui_BFu9ll_BFu0ll) C1{ Fi FL:9 FL:0}



static void Test_Ui_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0ll");
    static STRUCT_IF_C Ui_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9ll_BFu0ll, Ui_BFu9ll_BFu0ll)
//============================================================================


struct  Ui_BFu9ll_BFu0s  {
  unsigned int v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Ui_BFu9ll_BFu0s) C1{ Fi FL:9 Fs:0}



static void Test_Ui_BFu9ll_BFu0s()
{
  {
    init_simple_test("Ui_BFu9ll_BFu0s");
    static STRUCT_IF_C Ui_BFu9ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9ll_BFu0s, Ui_BFu9ll_BFu0s)
//============================================================================


struct  Ui_BFu9s_BFu0c  {
  unsigned int v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Ui_BFu9s_BFu0c) C1{ Fi Fs:9 Fc:0}



static void Test_Ui_BFu9s_BFu0c()
{
  {
    init_simple_test("Ui_BFu9s_BFu0c");
    static STRUCT_IF_C Ui_BFu9s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9s_BFu0c, Ui_BFu9s_BFu0c)
//============================================================================


struct  Ui_BFu9s_BFu0i  {
  unsigned int v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Ui_BFu9s_BFu0i) C1{ Fi Fs:9 Fi:0}



static void Test_Ui_BFu9s_BFu0i()
{
  {
    init_simple_test("Ui_BFu9s_BFu0i");
    static STRUCT_IF_C Ui_BFu9s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9s_BFu0i, Ui_BFu9s_BFu0i)
//============================================================================


struct  Ui_BFu9s_BFu0ll  {
  unsigned int v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Ui_BFu9s_BFu0ll) C1{ Fi Fs:9 FL:0}



static void Test_Ui_BFu9s_BFu0ll()
{
  {
    init_simple_test("Ui_BFu9s_BFu0ll");
    static STRUCT_IF_C Ui_BFu9s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9s_BFu0ll, Ui_BFu9s_BFu0ll)
//============================================================================


struct  Ui_BFu9s_BFu0s  {
  unsigned int v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Ui_BFu9s_BFu0s) C1{ Fi Fs:9 Fs:0}



static void Test_Ui_BFu9s_BFu0s()
{
  {
    init_simple_test("Ui_BFu9s_BFu0s");
    static STRUCT_IF_C Ui_BFu9s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_BFu9s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Ui_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Ui_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_BFu9s_BFu0s, Ui_BFu9s_BFu0s)
//============================================================================


struct  Ui_C_BFu0c  {
  unsigned int v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Ui_C_BFu0c) C1{ Fi Fc Fc:0}



static void Test_Ui_C_BFu0c()
{
  {
    init_simple_test("Ui_C_BFu0c");
    static STRUCT_IF_C Ui_C_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_C_BFu0c, Ui_C_BFu0c)
//============================================================================


struct  Ui_C_BFu0i  {
  unsigned int v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Ui_C_BFu0i) C1{ Fi Fc Fi:0}



static void Test_Ui_C_BFu0i()
{
  {
    init_simple_test("Ui_C_BFu0i");
    static STRUCT_IF_C Ui_C_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_C_BFu0i, Ui_C_BFu0i)
//============================================================================


struct  Ui_C_BFu0ll  {
  unsigned int v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Ui_C_BFu0ll) C1{ Fi Fc FL:0}



static void Test_Ui_C_BFu0ll()
{
  {
    init_simple_test("Ui_C_BFu0ll");
    static STRUCT_IF_C Ui_C_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_C_BFu0ll, Ui_C_BFu0ll)
//============================================================================


struct  Ui_C_BFu0s  {
  unsigned int v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Ui_C_BFu0s) C1{ Fi Fc Fs:0}



static void Test_Ui_C_BFu0s()
{
  {
    init_simple_test("Ui_C_BFu0s");
    static STRUCT_IF_C Ui_C_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_C_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_C_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_C_BFu0s, Ui_C_BFu0s)
//============================================================================


struct  Ui_D_BFu0c  {
  unsigned int v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Ui_D_BFu0c) C1{ Fi FL Fc:0}



static void Test_Ui_D_BFu0c()
{
  {
    init_simple_test("Ui_D_BFu0c");
    static STRUCT_IF_C Ui_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_D_BFu0c, Ui_D_BFu0c)
//============================================================================


struct  Ui_D_BFu0i  {
  unsigned int v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Ui_D_BFu0i) C1{ Fi FL Fi:0}



static void Test_Ui_D_BFu0i()
{
  {
    init_simple_test("Ui_D_BFu0i");
    static STRUCT_IF_C Ui_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_D_BFu0i, Ui_D_BFu0i)
//============================================================================


struct  Ui_D_BFu0ll  {
  unsigned int v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Ui_D_BFu0ll) C1{ Fi FL FL:0}



static void Test_Ui_D_BFu0ll()
{
  {
    init_simple_test("Ui_D_BFu0ll");
    static STRUCT_IF_C Ui_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_D_BFu0ll, Ui_D_BFu0ll)
//============================================================================


struct  Ui_D_BFu0s  {
  unsigned int v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Ui_D_BFu0s) C1{ Fi FL Fs:0}



static void Test_Ui_D_BFu0s()
{
  {
    init_simple_test("Ui_D_BFu0s");
    static STRUCT_IF_C Ui_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_D_BFu0s, Ui_D_BFu0s)
//============================================================================


struct  Ui_F_BFu0c  {
  unsigned int v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Ui_F_BFu0c) C1{ Fi[2] Fc:0}



static void Test_Ui_F_BFu0c()
{
  {
    init_simple_test("Ui_F_BFu0c");
    static STRUCT_IF_C Ui_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_F_BFu0c, Ui_F_BFu0c)
//============================================================================


struct  Ui_F_BFu0i  {
  unsigned int v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Ui_F_BFu0i) C1{ Fi[2] Fi:0}



static void Test_Ui_F_BFu0i()
{
  {
    init_simple_test("Ui_F_BFu0i");
    static STRUCT_IF_C Ui_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_F_BFu0i, Ui_F_BFu0i)
//============================================================================


struct  Ui_F_BFu0ll  {
  unsigned int v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Ui_F_BFu0ll) C1{ Fi[2] FL:0}



static void Test_Ui_F_BFu0ll()
{
  {
    init_simple_test("Ui_F_BFu0ll");
    static STRUCT_IF_C Ui_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_F_BFu0ll, Ui_F_BFu0ll)
//============================================================================


struct  Ui_F_BFu0s  {
  unsigned int v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Ui_F_BFu0s) C1{ Fi[2] Fs:0}



static void Test_Ui_F_BFu0s()
{
  {
    init_simple_test("Ui_F_BFu0s");
    static STRUCT_IF_C Ui_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_F_BFu0s, Ui_F_BFu0s)
//============================================================================


struct  Ui_I_BFu0c  {
  unsigned int v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Ui_I_BFu0c) C1{ Fi[2] Fc:0}



static void Test_Ui_I_BFu0c()
{
  {
    init_simple_test("Ui_I_BFu0c");
    static STRUCT_IF_C Ui_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_I_BFu0c, Ui_I_BFu0c)
//============================================================================


struct  Ui_I_BFu0i  {
  unsigned int v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Ui_I_BFu0i) C1{ Fi[2] Fi:0}



static void Test_Ui_I_BFu0i()
{
  {
    init_simple_test("Ui_I_BFu0i");
    static STRUCT_IF_C Ui_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_I_BFu0i, Ui_I_BFu0i)
//============================================================================


struct  Ui_I_BFu0ll  {
  unsigned int v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Ui_I_BFu0ll) C1{ Fi[2] FL:0}



static void Test_Ui_I_BFu0ll()
{
  {
    init_simple_test("Ui_I_BFu0ll");
    static STRUCT_IF_C Ui_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_I_BFu0ll, Ui_I_BFu0ll)
//============================================================================


struct  Ui_I_BFu0s  {
  unsigned int v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Ui_I_BFu0s) C1{ Fi[2] Fs:0}



static void Test_Ui_I_BFu0s()
{
  {
    init_simple_test("Ui_I_BFu0s");
    static STRUCT_IF_C Ui_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_I_BFu0s, Ui_I_BFu0s)
//============================================================================


struct  Ui_Ip_BFu0c  {
  unsigned int v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Ui_Ip_BFu0c) C1{ Fi Fp Fc:0}



static void Test_Ui_Ip_BFu0c()
{
  {
    init_simple_test("Ui_Ip_BFu0c");
    static STRUCT_IF_C Ui_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ip_BFu0c, Ui_Ip_BFu0c)
//============================================================================


struct  Ui_Ip_BFu0i  {
  unsigned int v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Ui_Ip_BFu0i) C1{ Fi Fp Fi:0}



static void Test_Ui_Ip_BFu0i()
{
  {
    init_simple_test("Ui_Ip_BFu0i");
    static STRUCT_IF_C Ui_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ip_BFu0i, Ui_Ip_BFu0i)
//============================================================================


struct  Ui_Ip_BFu0ll  {
  unsigned int v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Ui_Ip_BFu0ll) C1{ Fi Fp FL:0}



static void Test_Ui_Ip_BFu0ll()
{
  {
    init_simple_test("Ui_Ip_BFu0ll");
    static STRUCT_IF_C Ui_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ip_BFu0ll, Ui_Ip_BFu0ll)
//============================================================================


struct  Ui_Ip_BFu0s  {
  unsigned int v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Ui_Ip_BFu0s) C1{ Fi Fp Fs:0}



static void Test_Ui_Ip_BFu0s()
{
  {
    init_simple_test("Ui_Ip_BFu0s");
    static STRUCT_IF_C Ui_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ip_BFu0s, Ui_Ip_BFu0s)
//============================================================================


struct  Ui_L_BFu0c  {
  unsigned int v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Ui_L_BFu0c) C1{ Fi FL Fc:0}



static void Test_Ui_L_BFu0c()
{
  {
    init_simple_test("Ui_L_BFu0c");
    static STRUCT_IF_C Ui_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_L_BFu0c, Ui_L_BFu0c)
//============================================================================


struct  Ui_L_BFu0i  {
  unsigned int v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Ui_L_BFu0i) C1{ Fi FL Fi:0}



static void Test_Ui_L_BFu0i()
{
  {
    init_simple_test("Ui_L_BFu0i");
    static STRUCT_IF_C Ui_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_L_BFu0i, Ui_L_BFu0i)
//============================================================================


struct  Ui_L_BFu0ll  {
  unsigned int v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Ui_L_BFu0ll) C1{ Fi FL FL:0}



static void Test_Ui_L_BFu0ll()
{
  {
    init_simple_test("Ui_L_BFu0ll");
    static STRUCT_IF_C Ui_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_L_BFu0ll, Ui_L_BFu0ll)
//============================================================================


struct  Ui_L_BFu0s  {
  unsigned int v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Ui_L_BFu0s) C1{ Fi FL Fs:0}



static void Test_Ui_L_BFu0s()
{
  {
    init_simple_test("Ui_L_BFu0s");
    static STRUCT_IF_C Ui_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_L_BFu0s, Ui_L_BFu0s)
//============================================================================


struct  Ui_S_BFu0c  {
  unsigned int v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Ui_S_BFu0c) C1{ Fi Fs Fc:0}



static void Test_Ui_S_BFu0c()
{
  {
    init_simple_test("Ui_S_BFu0c");
    static STRUCT_IF_C Ui_S_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_S_BFu0c, Ui_S_BFu0c)
//============================================================================


struct  Ui_S_BFu0i  {
  unsigned int v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Ui_S_BFu0i) C1{ Fi Fs Fi:0}



static void Test_Ui_S_BFu0i()
{
  {
    init_simple_test("Ui_S_BFu0i");
    static STRUCT_IF_C Ui_S_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_S_BFu0i, Ui_S_BFu0i)
//============================================================================


struct  Ui_S_BFu0ll  {
  unsigned int v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Ui_S_BFu0ll) C1{ Fi Fs FL:0}



static void Test_Ui_S_BFu0ll()
{
  {
    init_simple_test("Ui_S_BFu0ll");
    static STRUCT_IF_C Ui_S_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_S_BFu0ll, Ui_S_BFu0ll)
//============================================================================


struct  Ui_S_BFu0s  {
  unsigned int v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Ui_S_BFu0s) C1{ Fi Fs Fs:0}



static void Test_Ui_S_BFu0s()
{
  {
    init_simple_test("Ui_S_BFu0s");
    static STRUCT_IF_C Ui_S_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_S_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_S_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_S_BFu0s, Ui_S_BFu0s)
//============================================================================


struct  Ui_Uc_BFu0c  {
  unsigned int v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Ui_Uc_BFu0c) C1{ Fi Fc Fc:0}



static void Test_Ui_Uc_BFu0c()
{
  {
    init_simple_test("Ui_Uc_BFu0c");
    static STRUCT_IF_C Ui_Uc_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Uc_BFu0c, Ui_Uc_BFu0c)
//============================================================================


struct  Ui_Uc_BFu0i  {
  unsigned int v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Ui_Uc_BFu0i) C1{ Fi Fc Fi:0}



static void Test_Ui_Uc_BFu0i()
{
  {
    init_simple_test("Ui_Uc_BFu0i");
    static STRUCT_IF_C Ui_Uc_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Uc_BFu0i, Ui_Uc_BFu0i)
//============================================================================


struct  Ui_Uc_BFu0ll  {
  unsigned int v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Ui_Uc_BFu0ll) C1{ Fi Fc FL:0}



static void Test_Ui_Uc_BFu0ll()
{
  {
    init_simple_test("Ui_Uc_BFu0ll");
    static STRUCT_IF_C Ui_Uc_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Uc_BFu0ll, Ui_Uc_BFu0ll)
//============================================================================


struct  Ui_Uc_BFu0s  {
  unsigned int v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Ui_Uc_BFu0s) C1{ Fi Fc Fs:0}



static void Test_Ui_Uc_BFu0s()
{
  {
    init_simple_test("Ui_Uc_BFu0s");
    static STRUCT_IF_C Ui_Uc_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Uc_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Uc_BFu0s, Ui_Uc_BFu0s)
//============================================================================


struct  Ui_Ui_BFu0c  {
  unsigned int v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Ui_Ui_BFu0c) C1{ Fi[2] Fc:0}



static void Test_Ui_Ui_BFu0c()
{
  {
    init_simple_test("Ui_Ui_BFu0c");
    static STRUCT_IF_C Ui_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ui_BFu0c, Ui_Ui_BFu0c)
//============================================================================


struct  Ui_Ui_BFu0i  {
  unsigned int v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Ui_Ui_BFu0i) C1{ Fi[2] Fi:0}



static void Test_Ui_Ui_BFu0i()
{
  {
    init_simple_test("Ui_Ui_BFu0i");
    static STRUCT_IF_C Ui_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ui_BFu0i, Ui_Ui_BFu0i)
//============================================================================


struct  Ui_Ui_BFu0ll  {
  unsigned int v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Ui_Ui_BFu0ll) C1{ Fi[2] FL:0}



static void Test_Ui_Ui_BFu0ll()
{
  {
    init_simple_test("Ui_Ui_BFu0ll");
    static STRUCT_IF_C Ui_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ui_BFu0ll, Ui_Ui_BFu0ll)
//============================================================================


struct  Ui_Ui_BFu0s  {
  unsigned int v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Ui_Ui_BFu0s) C1{ Fi[2] Fs:0}



static void Test_Ui_Ui_BFu0s()
{
  {
    init_simple_test("Ui_Ui_BFu0s");
    static STRUCT_IF_C Ui_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ui_BFu0s, Ui_Ui_BFu0s)
//============================================================================


struct  Ui_Ul_BFu0c  {
  unsigned int v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Ui_Ul_BFu0c) C1{ Fi FL Fc:0}



static void Test_Ui_Ul_BFu0c()
{
  {
    init_simple_test("Ui_Ul_BFu0c");
    static STRUCT_IF_C Ui_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ul_BFu0c, Ui_Ul_BFu0c)
//============================================================================


struct  Ui_Ul_BFu0i  {
  unsigned int v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Ui_Ul_BFu0i) C1{ Fi FL Fi:0}



static void Test_Ui_Ul_BFu0i()
{
  {
    init_simple_test("Ui_Ul_BFu0i");
    static STRUCT_IF_C Ui_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ul_BFu0i, Ui_Ul_BFu0i)
//============================================================================


struct  Ui_Ul_BFu0ll  {
  unsigned int v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Ui_Ul_BFu0ll) C1{ Fi FL FL:0}



static void Test_Ui_Ul_BFu0ll()
{
  {
    init_simple_test("Ui_Ul_BFu0ll");
    static STRUCT_IF_C Ui_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ul_BFu0ll, Ui_Ul_BFu0ll)
//============================================================================


struct  Ui_Ul_BFu0s  {
  unsigned int v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Ui_Ul_BFu0s) C1{ Fi FL Fs:0}



static void Test_Ui_Ul_BFu0s()
{
  {
    init_simple_test("Ui_Ul_BFu0s");
    static STRUCT_IF_C Ui_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ui_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Ul_BFu0s, Ui_Ul_BFu0s)
//============================================================================


struct  Ui_Us_BFu0c  {
  unsigned int v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Ui_Us_BFu0c) C1{ Fi Fs Fc:0}



static void Test_Ui_Us_BFu0c()
{
  {
    init_simple_test("Ui_Us_BFu0c");
    static STRUCT_IF_C Ui_Us_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Us_BFu0c, Ui_Us_BFu0c)
//============================================================================


struct  Ui_Us_BFu0i  {
  unsigned int v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Ui_Us_BFu0i) C1{ Fi Fs Fi:0}



static void Test_Ui_Us_BFu0i()
{
  {
    init_simple_test("Ui_Us_BFu0i");
    static STRUCT_IF_C Ui_Us_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Us_BFu0i, Ui_Us_BFu0i)
//============================================================================


struct  Ui_Us_BFu0ll  {
  unsigned int v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Ui_Us_BFu0ll) C1{ Fi Fs FL:0}



static void Test_Ui_Us_BFu0ll()
{
  {
    init_simple_test("Ui_Us_BFu0ll");
    static STRUCT_IF_C Ui_Us_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Ui_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Us_BFu0ll, Ui_Us_BFu0ll)
//============================================================================


struct  Ui_Us_BFu0s  {
  unsigned int v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Ui_Us_BFu0s) C1{ Fi Fs Fs:0}



static void Test_Ui_Us_BFu0s()
{
  {
    init_simple_test("Ui_Us_BFu0s");
    static STRUCT_IF_C Ui_Us_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ui_Us_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Ui_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Us_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Ui_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Us_BFu0s, Ui_Us_BFu0s)
//============================================================================


struct  Ui_Vp_BFu0c  {
  unsigned int v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Ui_Vp_BFu0c) C1{ Fi Fp Fc:0}



static void Test_Ui_Vp_BFu0c()
{
  {
    init_simple_test("Ui_Vp_BFu0c");
    static STRUCT_IF_C Ui_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Vp_BFu0c, Ui_Vp_BFu0c)
//============================================================================


struct  Ui_Vp_BFu0i  {
  unsigned int v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Ui_Vp_BFu0i) C1{ Fi Fp Fi:0}



static void Test_Ui_Vp_BFu0i()
{
  {
    init_simple_test("Ui_Vp_BFu0i");
    static STRUCT_IF_C Ui_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Vp_BFu0i, Ui_Vp_BFu0i)
//============================================================================


struct  Ui_Vp_BFu0ll  {
  unsigned int v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Ui_Vp_BFu0ll) C1{ Fi Fp FL:0}



static void Test_Ui_Vp_BFu0ll()
{
  {
    init_simple_test("Ui_Vp_BFu0ll");
    static STRUCT_IF_C Ui_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Vp_BFu0ll, Ui_Vp_BFu0ll)
//============================================================================


struct  Ui_Vp_BFu0s  {
  unsigned int v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Ui_Vp_BFu0s) C1{ Fi Fp Fs:0}



static void Test_Ui_Vp_BFu0s()
{
  {
    init_simple_test("Ui_Vp_BFu0s");
    static STRUCT_IF_C Ui_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ui_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ui_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Ui_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ui_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ui_Vp_BFu0s, Ui_Vp_BFu0s)
//============================================================================


struct  Ul_BFu0c  {
  __tsu64 v1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0c) C1{ FL Fc:0}



static void Test_Ul_BFu0c()
{
  {
    init_simple_test("Ul_BFu0c");
    static STRUCT_IF_C Ul_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c, Ul_BFu0c)
//============================================================================


struct  Ul_BFu0c_BFu0c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0c_BFu0c) C1{ FL Fc:0 Fc:0}



static void Test_Ul_BFu0c_BFu0c()
{
  {
    init_simple_test("Ul_BFu0c_BFu0c");
    static STRUCT_IF_C Ul_BFu0c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu0c, Ul_BFu0c_BFu0c)
//============================================================================


struct  Ul_BFu0c_BFu0i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0c_BFu0i) C1{ FL Fc:0 Fi:0}



static void Test_Ul_BFu0c_BFu0i()
{
  {
    init_simple_test("Ul_BFu0c_BFu0i");
    static STRUCT_IF_C Ul_BFu0c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu0i, Ul_BFu0c_BFu0i)
//============================================================================


struct  Ul_BFu0c_BFu0ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0c_BFu0ll) C1{ FL Fc:0 FL:0}



static void Test_Ul_BFu0c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu0ll");
    static STRUCT_IF_C Ul_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu0ll, Ul_BFu0c_BFu0ll)
//============================================================================


struct  Ul_BFu0c_BFu0s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0c_BFu0s) C1{ FL Fc:0 Fs:0}



static void Test_Ul_BFu0c_BFu0s()
{
  {
    init_simple_test("Ul_BFu0c_BFu0s");
    static STRUCT_IF_C Ul_BFu0c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu0s, Ul_BFu0c_BFu0s)
//============================================================================


struct  Ul_BFu0c_BFu15i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0c_BFu15i) C1{ FL Fc:0 Fi:15}



static void Test_Ul_BFu0c_BFu15i()
{
  {
    init_simple_test("Ul_BFu0c_BFu15i");
    static STRUCT_IF_C Ul_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu15i, Ul_BFu0c_BFu15i)
//============================================================================


struct  Ul_BFu0c_BFu15ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0c_BFu15ll) C1{ FL Fc:0 FL:15}



static void Test_Ul_BFu0c_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu15ll");
    static STRUCT_IF_C Ul_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu15ll, Ul_BFu0c_BFu15ll)
//============================================================================


struct  Ul_BFu0c_BFu15s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0c_BFu15s) C1{ FL Fc:0 Fs:15}



static void Test_Ul_BFu0c_BFu15s()
{
  {
    init_simple_test("Ul_BFu0c_BFu15s");
    static STRUCT_IF_C Ul_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu15s, Ul_BFu0c_BFu15s)
//============================================================================


struct  Ul_BFu0c_BFu16i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0c_BFu16i) C1{ FL Fc:0 Fi:16}



static void Test_Ul_BFu0c_BFu16i()
{
  {
    init_simple_test("Ul_BFu0c_BFu16i");
    static STRUCT_IF_C Ul_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu16i, Ul_BFu0c_BFu16i)
//============================================================================


struct  Ul_BFu0c_BFu16ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0c_BFu16ll) C1{ FL Fc:0 FL:16}



static void Test_Ul_BFu0c_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu16ll");
    static STRUCT_IF_C Ul_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu16ll, Ul_BFu0c_BFu16ll)
//============================================================================


struct  Ul_BFu0c_BFu16s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0c_BFu16s) C1{ FL Fc:0 Fs:16}



static void Test_Ul_BFu0c_BFu16s()
{
  {
    init_simple_test("Ul_BFu0c_BFu16s");
    static STRUCT_IF_C Ul_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu16s, Ul_BFu0c_BFu16s)
//============================================================================


struct  Ul_BFu0c_BFu17i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0c_BFu17i) C1{ FL Fc:0 Fi:17}



static void Test_Ul_BFu0c_BFu17i()
{
  {
    init_simple_test("Ul_BFu0c_BFu17i");
    static STRUCT_IF_C Ul_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu17i, Ul_BFu0c_BFu17i)
//============================================================================


struct  Ul_BFu0c_BFu17ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0c_BFu17ll) C1{ FL Fc:0 FL:17}



static void Test_Ul_BFu0c_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu17ll");
    static STRUCT_IF_C Ul_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu17ll, Ul_BFu0c_BFu17ll)
//============================================================================


struct  Ul_BFu0c_BFu1c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0c_BFu1c) C1{ FL Fc:0 Fc:1}



static void Test_Ul_BFu0c_BFu1c()
{
  {
    init_simple_test("Ul_BFu0c_BFu1c");
    static STRUCT_IF_C Ul_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu1c, Ul_BFu0c_BFu1c)
//============================================================================


struct  Ul_BFu0c_BFu1i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0c_BFu1i) C1{ FL Fc:0 Fi:1}



static void Test_Ul_BFu0c_BFu1i()
{
  {
    init_simple_test("Ul_BFu0c_BFu1i");
    static STRUCT_IF_C Ul_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu1i, Ul_BFu0c_BFu1i)
//============================================================================


struct  Ul_BFu0c_BFu1ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0c_BFu1ll) C1{ FL Fc:0 FL:1}



static void Test_Ul_BFu0c_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu1ll");
    static STRUCT_IF_C Ul_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu1ll, Ul_BFu0c_BFu1ll)
//============================================================================


struct  Ul_BFu0c_BFu1s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0c_BFu1s) C1{ FL Fc:0 Fs:1}



static void Test_Ul_BFu0c_BFu1s()
{
  {
    init_simple_test("Ul_BFu0c_BFu1s");
    static STRUCT_IF_C Ul_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu1s, Ul_BFu0c_BFu1s)
//============================================================================


struct  Ul_BFu0c_BFu31i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0c_BFu31i) C1{ FL Fc:0 Fi:31}



static void Test_Ul_BFu0c_BFu31i()
{
  {
    init_simple_test("Ul_BFu0c_BFu31i");
    static STRUCT_IF_C Ul_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu31i, Ul_BFu0c_BFu31i)
//============================================================================


struct  Ul_BFu0c_BFu31ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0c_BFu31ll) C1{ FL Fc:0 FL:31}



static void Test_Ul_BFu0c_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu31ll");
    static STRUCT_IF_C Ul_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu31ll, Ul_BFu0c_BFu31ll)
//============================================================================


struct  Ul_BFu0c_BFu32i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0c_BFu32i) C1{ FL Fc:0 Fi:32}



static void Test_Ul_BFu0c_BFu32i()
{
  {
    init_simple_test("Ul_BFu0c_BFu32i");
    static STRUCT_IF_C Ul_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu32i, Ul_BFu0c_BFu32i)
//============================================================================


struct  Ul_BFu0c_BFu32ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0c_BFu32ll) C1{ FL Fc:0 FL:32}



static void Test_Ul_BFu0c_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu32ll");
    static STRUCT_IF_C Ul_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu32ll, Ul_BFu0c_BFu32ll)
//============================================================================


struct  Ul_BFu0c_BFu33  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0c_BFu33) C1{ FL Fc:0 FL:33}



static void Test_Ul_BFu0c_BFu33()
{
  {
    init_simple_test("Ul_BFu0c_BFu33");
    static STRUCT_IF_C Ul_BFu0c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu33, Ul_BFu0c_BFu33)
//============================================================================


struct  Ul_BFu0c_BFu7c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0c_BFu7c) C1{ FL Fc:0 Fc:7}



static void Test_Ul_BFu0c_BFu7c()
{
  {
    init_simple_test("Ul_BFu0c_BFu7c");
    static STRUCT_IF_C Ul_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu7c, Ul_BFu0c_BFu7c)
//============================================================================


struct  Ul_BFu0c_BFu7i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0c_BFu7i) C1{ FL Fc:0 Fi:7}



static void Test_Ul_BFu0c_BFu7i()
{
  {
    init_simple_test("Ul_BFu0c_BFu7i");
    static STRUCT_IF_C Ul_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu7i, Ul_BFu0c_BFu7i)
//============================================================================


struct  Ul_BFu0c_BFu7ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0c_BFu7ll) C1{ FL Fc:0 FL:7}



static void Test_Ul_BFu0c_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu7ll");
    static STRUCT_IF_C Ul_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu7ll, Ul_BFu0c_BFu7ll)
//============================================================================


struct  Ul_BFu0c_BFu7s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0c_BFu7s) C1{ FL Fc:0 Fs:7}



static void Test_Ul_BFu0c_BFu7s()
{
  {
    init_simple_test("Ul_BFu0c_BFu7s");
    static STRUCT_IF_C Ul_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu7s, Ul_BFu0c_BFu7s)
//============================================================================


struct  Ul_BFu0c_BFu8c  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0c_BFu8c) C1{ FL Fc:0 Fc:8}



static void Test_Ul_BFu0c_BFu8c()
{
  {
    init_simple_test("Ul_BFu0c_BFu8c");
    static STRUCT_IF_C Ul_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu8c, Ul_BFu0c_BFu8c)
//============================================================================


struct  Ul_BFu0c_BFu8i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0c_BFu8i) C1{ FL Fc:0 Fi:8}



static void Test_Ul_BFu0c_BFu8i()
{
  {
    init_simple_test("Ul_BFu0c_BFu8i");
    static STRUCT_IF_C Ul_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu8i, Ul_BFu0c_BFu8i)
//============================================================================


struct  Ul_BFu0c_BFu8ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0c_BFu8ll) C1{ FL Fc:0 FL:8}



static void Test_Ul_BFu0c_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu8ll");
    static STRUCT_IF_C Ul_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu8ll, Ul_BFu0c_BFu8ll)
//============================================================================


struct  Ul_BFu0c_BFu8s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0c_BFu8s) C1{ FL Fc:0 Fs:8}



static void Test_Ul_BFu0c_BFu8s()
{
  {
    init_simple_test("Ul_BFu0c_BFu8s");
    static STRUCT_IF_C Ul_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu8s, Ul_BFu0c_BFu8s)
//============================================================================


struct  Ul_BFu0c_BFu9i  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0c_BFu9i) C1{ FL Fc:0 Fi:9}



static void Test_Ul_BFu0c_BFu9i()
{
  {
    init_simple_test("Ul_BFu0c_BFu9i");
    static STRUCT_IF_C Ul_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu9i, Ul_BFu0c_BFu9i)
//============================================================================


struct  Ul_BFu0c_BFu9ll  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0c_BFu9ll) C1{ FL Fc:0 FL:9}



static void Test_Ul_BFu0c_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0c_BFu9ll");
    static STRUCT_IF_C Ul_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu9ll, Ul_BFu0c_BFu9ll)
//============================================================================


struct  Ul_BFu0c_BFu9s  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0c_BFu9s) C1{ FL Fc:0 Fs:9}



static void Test_Ul_BFu0c_BFu9s()
{
  {
    init_simple_test("Ul_BFu0c_BFu9s");
    static STRUCT_IF_C Ul_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_BFu9s, Ul_BFu0c_BFu9s)
//============================================================================


struct  Ul_BFu0c_C  {
  __tsu64 v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Ul_BFu0c_C) C1{ FL Fc:0 Fc}



static void Test_Ul_BFu0c_C()
{
  {
    init_simple_test("Ul_BFu0c_C");
    static STRUCT_IF_C Ul_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_C, Ul_BFu0c_C)
//============================================================================


struct  Ul_BFu0c_D  {
  __tsu64 v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Ul_BFu0c_D) C1{ FL Fc:0 FL}



static void Test_Ul_BFu0c_D()
{
  {
    init_simple_test("Ul_BFu0c_D");
    static STRUCT_IF_C Ul_BFu0c_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_D, Ul_BFu0c_D)
//============================================================================


struct  Ul_BFu0c_F  {
  __tsu64 v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Ul_BFu0c_F) C1{ FL Fc:0 Fi}



static void Test_Ul_BFu0c_F()
{
  {
    init_simple_test("Ul_BFu0c_F");
    static STRUCT_IF_C Ul_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_F, Ul_BFu0c_F)
//============================================================================


struct  Ul_BFu0c_I  {
  __tsu64 v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Ul_BFu0c_I) C1{ FL Fc:0 Fi}



static void Test_Ul_BFu0c_I()
{
  {
    init_simple_test("Ul_BFu0c_I");
    static STRUCT_IF_C Ul_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_I, Ul_BFu0c_I)
//============================================================================


struct  Ul_BFu0c_Ip  {
  __tsu64 v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Ul_BFu0c_Ip) C1{ FL Fc:0 Fp}



static void Test_Ul_BFu0c_Ip()
{
  {
    init_simple_test("Ul_BFu0c_Ip");
    static STRUCT_IF_C Ul_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_Ip, Ul_BFu0c_Ip)
//============================================================================


struct  Ul_BFu0c_L  {
  __tsu64 v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0c_L) C1{ FL Fc:0 FL}



static void Test_Ul_BFu0c_L()
{
  {
    init_simple_test("Ul_BFu0c_L");
    static STRUCT_IF_C Ul_BFu0c_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_L, Ul_BFu0c_L)
//============================================================================


struct  Ul_BFu0c_S  {
  __tsu64 v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Ul_BFu0c_S) C1{ FL Fc:0 Fs}



static void Test_Ul_BFu0c_S()
{
  {
    init_simple_test("Ul_BFu0c_S");
    static STRUCT_IF_C Ul_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_S, Ul_BFu0c_S)
//============================================================================


struct  Ul_BFu0c_Uc  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0c_Uc) C1{ FL Fc:0 Fc}



static void Test_Ul_BFu0c_Uc()
{
  {
    init_simple_test("Ul_BFu0c_Uc");
    static STRUCT_IF_C Ul_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_Uc, Ul_BFu0c_Uc)
//============================================================================


struct  Ul_BFu0c_Ui  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0c_Ui) C1{ FL Fc:0 Fi}



static void Test_Ul_BFu0c_Ui()
{
  {
    init_simple_test("Ul_BFu0c_Ui");
    static STRUCT_IF_C Ul_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_Ui, Ul_BFu0c_Ui)
//============================================================================


struct  Ul_BFu0c_Ul  {
  __tsu64 v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0c_Ul) C1{ FL Fc:0 FL}



static void Test_Ul_BFu0c_Ul()
{
  {
    init_simple_test("Ul_BFu0c_Ul");
    static STRUCT_IF_C Ul_BFu0c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_Ul, Ul_BFu0c_Ul)
//============================================================================


struct  Ul_BFu0c_Us  {
  __tsu64 v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0c_Us) C1{ FL Fc:0 Fs}



static void Test_Ul_BFu0c_Us()
{
  {
    init_simple_test("Ul_BFu0c_Us");
    static STRUCT_IF_C Ul_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_Us, Ul_BFu0c_Us)
//============================================================================


struct  Ul_BFu0c_Vp  {
  __tsu64 v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Ul_BFu0c_Vp) C1{ FL Fc:0 Fp}



static void Test_Ul_BFu0c_Vp()
{
  {
    init_simple_test("Ul_BFu0c_Vp");
    static STRUCT_IF_C Ul_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0c_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0c_Vp, Ul_BFu0c_Vp)
//============================================================================


struct  Ul_BFu0i  {
  __tsu64 v1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0i) C1{ FL Fi:0}



static void Test_Ul_BFu0i()
{
  {
    init_simple_test("Ul_BFu0i");
    static STRUCT_IF_C Ul_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i, Ul_BFu0i)
//============================================================================


struct  Ul_BFu0i_BFu0c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0i_BFu0c) C1{ FL Fi:0 Fc:0}



static void Test_Ul_BFu0i_BFu0c()
{
  {
    init_simple_test("Ul_BFu0i_BFu0c");
    static STRUCT_IF_C Ul_BFu0i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu0c, Ul_BFu0i_BFu0c)
//============================================================================


struct  Ul_BFu0i_BFu0i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0i_BFu0i) C1{ FL Fi:0 Fi:0}



static void Test_Ul_BFu0i_BFu0i()
{
  {
    init_simple_test("Ul_BFu0i_BFu0i");
    static STRUCT_IF_C Ul_BFu0i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu0i, Ul_BFu0i_BFu0i)
//============================================================================


struct  Ul_BFu0i_BFu0ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0i_BFu0ll) C1{ FL Fi:0 FL:0}



static void Test_Ul_BFu0i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu0ll");
    static STRUCT_IF_C Ul_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu0ll, Ul_BFu0i_BFu0ll)
//============================================================================


struct  Ul_BFu0i_BFu0s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0i_BFu0s) C1{ FL Fi:0 Fs:0}



static void Test_Ul_BFu0i_BFu0s()
{
  {
    init_simple_test("Ul_BFu0i_BFu0s");
    static STRUCT_IF_C Ul_BFu0i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu0s, Ul_BFu0i_BFu0s)
//============================================================================


struct  Ul_BFu0i_BFu15i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0i_BFu15i) C1{ FL Fi:0 Fi:15}



static void Test_Ul_BFu0i_BFu15i()
{
  {
    init_simple_test("Ul_BFu0i_BFu15i");
    static STRUCT_IF_C Ul_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu15i, Ul_BFu0i_BFu15i)
//============================================================================


struct  Ul_BFu0i_BFu15ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0i_BFu15ll) C1{ FL Fi:0 FL:15}



static void Test_Ul_BFu0i_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu15ll");
    static STRUCT_IF_C Ul_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu15ll, Ul_BFu0i_BFu15ll)
//============================================================================


struct  Ul_BFu0i_BFu15s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0i_BFu15s) C1{ FL Fi:0 Fs:15}



static void Test_Ul_BFu0i_BFu15s()
{
  {
    init_simple_test("Ul_BFu0i_BFu15s");
    static STRUCT_IF_C Ul_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu15s, Ul_BFu0i_BFu15s)
//============================================================================


struct  Ul_BFu0i_BFu16i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0i_BFu16i) C1{ FL Fi:0 Fi:16}



static void Test_Ul_BFu0i_BFu16i()
{
  {
    init_simple_test("Ul_BFu0i_BFu16i");
    static STRUCT_IF_C Ul_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu16i, Ul_BFu0i_BFu16i)
//============================================================================


struct  Ul_BFu0i_BFu16ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0i_BFu16ll) C1{ FL Fi:0 FL:16}



static void Test_Ul_BFu0i_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu16ll");
    static STRUCT_IF_C Ul_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu16ll, Ul_BFu0i_BFu16ll)
//============================================================================


struct  Ul_BFu0i_BFu16s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0i_BFu16s) C1{ FL Fi:0 Fs:16}



static void Test_Ul_BFu0i_BFu16s()
{
  {
    init_simple_test("Ul_BFu0i_BFu16s");
    static STRUCT_IF_C Ul_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu16s, Ul_BFu0i_BFu16s)
//============================================================================


struct  Ul_BFu0i_BFu17i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0i_BFu17i) C1{ FL Fi:0 Fi:17}



static void Test_Ul_BFu0i_BFu17i()
{
  {
    init_simple_test("Ul_BFu0i_BFu17i");
    static STRUCT_IF_C Ul_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu17i, Ul_BFu0i_BFu17i)
//============================================================================


struct  Ul_BFu0i_BFu17ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0i_BFu17ll) C1{ FL Fi:0 FL:17}



static void Test_Ul_BFu0i_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu17ll");
    static STRUCT_IF_C Ul_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu17ll, Ul_BFu0i_BFu17ll)
//============================================================================


struct  Ul_BFu0i_BFu1c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0i_BFu1c) C1{ FL Fi:0 Fc:1}



static void Test_Ul_BFu0i_BFu1c()
{
  {
    init_simple_test("Ul_BFu0i_BFu1c");
    static STRUCT_IF_C Ul_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu1c, Ul_BFu0i_BFu1c)
//============================================================================


struct  Ul_BFu0i_BFu1i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0i_BFu1i) C1{ FL Fi:0 Fi:1}



static void Test_Ul_BFu0i_BFu1i()
{
  {
    init_simple_test("Ul_BFu0i_BFu1i");
    static STRUCT_IF_C Ul_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu1i, Ul_BFu0i_BFu1i)
//============================================================================


struct  Ul_BFu0i_BFu1ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0i_BFu1ll) C1{ FL Fi:0 FL:1}



static void Test_Ul_BFu0i_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu1ll");
    static STRUCT_IF_C Ul_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu1ll, Ul_BFu0i_BFu1ll)
//============================================================================


struct  Ul_BFu0i_BFu1s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0i_BFu1s) C1{ FL Fi:0 Fs:1}



static void Test_Ul_BFu0i_BFu1s()
{
  {
    init_simple_test("Ul_BFu0i_BFu1s");
    static STRUCT_IF_C Ul_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu1s, Ul_BFu0i_BFu1s)
//============================================================================


struct  Ul_BFu0i_BFu31i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0i_BFu31i) C1{ FL Fi:0 Fi:31}



static void Test_Ul_BFu0i_BFu31i()
{
  {
    init_simple_test("Ul_BFu0i_BFu31i");
    static STRUCT_IF_C Ul_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu31i, Ul_BFu0i_BFu31i)
//============================================================================


struct  Ul_BFu0i_BFu31ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0i_BFu31ll) C1{ FL Fi:0 FL:31}



static void Test_Ul_BFu0i_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu31ll");
    static STRUCT_IF_C Ul_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu31ll, Ul_BFu0i_BFu31ll)
//============================================================================


struct  Ul_BFu0i_BFu32i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0i_BFu32i) C1{ FL Fi:0 Fi:32}



static void Test_Ul_BFu0i_BFu32i()
{
  {
    init_simple_test("Ul_BFu0i_BFu32i");
    static STRUCT_IF_C Ul_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu32i, Ul_BFu0i_BFu32i)
//============================================================================


struct  Ul_BFu0i_BFu32ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0i_BFu32ll) C1{ FL Fi:0 FL:32}



static void Test_Ul_BFu0i_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu32ll");
    static STRUCT_IF_C Ul_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu32ll, Ul_BFu0i_BFu32ll)
//============================================================================


struct  Ul_BFu0i_BFu33  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0i_BFu33) C1{ FL Fi:0 FL:33}



static void Test_Ul_BFu0i_BFu33()
{
  {
    init_simple_test("Ul_BFu0i_BFu33");
    static STRUCT_IF_C Ul_BFu0i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu33, Ul_BFu0i_BFu33)
//============================================================================


struct  Ul_BFu0i_BFu7c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0i_BFu7c) C1{ FL Fi:0 Fc:7}



static void Test_Ul_BFu0i_BFu7c()
{
  {
    init_simple_test("Ul_BFu0i_BFu7c");
    static STRUCT_IF_C Ul_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu7c, Ul_BFu0i_BFu7c)
//============================================================================


struct  Ul_BFu0i_BFu7i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0i_BFu7i) C1{ FL Fi:0 Fi:7}



static void Test_Ul_BFu0i_BFu7i()
{
  {
    init_simple_test("Ul_BFu0i_BFu7i");
    static STRUCT_IF_C Ul_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu7i, Ul_BFu0i_BFu7i)
//============================================================================


struct  Ul_BFu0i_BFu7ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0i_BFu7ll) C1{ FL Fi:0 FL:7}



static void Test_Ul_BFu0i_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu7ll");
    static STRUCT_IF_C Ul_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu7ll, Ul_BFu0i_BFu7ll)
//============================================================================


struct  Ul_BFu0i_BFu7s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0i_BFu7s) C1{ FL Fi:0 Fs:7}



static void Test_Ul_BFu0i_BFu7s()
{
  {
    init_simple_test("Ul_BFu0i_BFu7s");
    static STRUCT_IF_C Ul_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu7s, Ul_BFu0i_BFu7s)
//============================================================================


struct  Ul_BFu0i_BFu8c  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0i_BFu8c) C1{ FL Fi:0 Fc:8}



static void Test_Ul_BFu0i_BFu8c()
{
  {
    init_simple_test("Ul_BFu0i_BFu8c");
    static STRUCT_IF_C Ul_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu8c, Ul_BFu0i_BFu8c)
//============================================================================


struct  Ul_BFu0i_BFu8i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0i_BFu8i) C1{ FL Fi:0 Fi:8}



static void Test_Ul_BFu0i_BFu8i()
{
  {
    init_simple_test("Ul_BFu0i_BFu8i");
    static STRUCT_IF_C Ul_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu8i, Ul_BFu0i_BFu8i)
//============================================================================


struct  Ul_BFu0i_BFu8ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0i_BFu8ll) C1{ FL Fi:0 FL:8}



static void Test_Ul_BFu0i_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu8ll");
    static STRUCT_IF_C Ul_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu8ll, Ul_BFu0i_BFu8ll)
//============================================================================


struct  Ul_BFu0i_BFu8s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0i_BFu8s) C1{ FL Fi:0 Fs:8}



static void Test_Ul_BFu0i_BFu8s()
{
  {
    init_simple_test("Ul_BFu0i_BFu8s");
    static STRUCT_IF_C Ul_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu8s, Ul_BFu0i_BFu8s)
//============================================================================


struct  Ul_BFu0i_BFu9i  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0i_BFu9i) C1{ FL Fi:0 Fi:9}



static void Test_Ul_BFu0i_BFu9i()
{
  {
    init_simple_test("Ul_BFu0i_BFu9i");
    static STRUCT_IF_C Ul_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu9i, Ul_BFu0i_BFu9i)
//============================================================================


struct  Ul_BFu0i_BFu9ll  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0i_BFu9ll) C1{ FL Fi:0 FL:9}



static void Test_Ul_BFu0i_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0i_BFu9ll");
    static STRUCT_IF_C Ul_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu9ll, Ul_BFu0i_BFu9ll)
//============================================================================


struct  Ul_BFu0i_BFu9s  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0i_BFu9s) C1{ FL Fi:0 Fs:9}



static void Test_Ul_BFu0i_BFu9s()
{
  {
    init_simple_test("Ul_BFu0i_BFu9s");
    static STRUCT_IF_C Ul_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_BFu9s, Ul_BFu0i_BFu9s)
//============================================================================


struct  Ul_BFu0i_C  {
  __tsu64 v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Ul_BFu0i_C) C1{ FL Fi:0 Fc}



static void Test_Ul_BFu0i_C()
{
  {
    init_simple_test("Ul_BFu0i_C");
    static STRUCT_IF_C Ul_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_C, Ul_BFu0i_C)
//============================================================================


struct  Ul_BFu0i_D  {
  __tsu64 v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Ul_BFu0i_D) C1{ FL Fi:0 FL}



static void Test_Ul_BFu0i_D()
{
  {
    init_simple_test("Ul_BFu0i_D");
    static STRUCT_IF_C Ul_BFu0i_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_D, Ul_BFu0i_D)
//============================================================================


struct  Ul_BFu0i_F  {
  __tsu64 v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Ul_BFu0i_F) C1{ FL Fi:0 Fi}



static void Test_Ul_BFu0i_F()
{
  {
    init_simple_test("Ul_BFu0i_F");
    static STRUCT_IF_C Ul_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_F, Ul_BFu0i_F)
//============================================================================


struct  Ul_BFu0i_I  {
  __tsu64 v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Ul_BFu0i_I) C1{ FL Fi:0 Fi}



static void Test_Ul_BFu0i_I()
{
  {
    init_simple_test("Ul_BFu0i_I");
    static STRUCT_IF_C Ul_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_I, Ul_BFu0i_I)
//============================================================================


struct  Ul_BFu0i_Ip  {
  __tsu64 v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Ul_BFu0i_Ip) C1{ FL Fi:0 Fp}



static void Test_Ul_BFu0i_Ip()
{
  {
    init_simple_test("Ul_BFu0i_Ip");
    static STRUCT_IF_C Ul_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_Ip, Ul_BFu0i_Ip)
//============================================================================


struct  Ul_BFu0i_L  {
  __tsu64 v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0i_L) C1{ FL Fi:0 FL}



static void Test_Ul_BFu0i_L()
{
  {
    init_simple_test("Ul_BFu0i_L");
    static STRUCT_IF_C Ul_BFu0i_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_L, Ul_BFu0i_L)
//============================================================================


struct  Ul_BFu0i_S  {
  __tsu64 v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Ul_BFu0i_S) C1{ FL Fi:0 Fs}



static void Test_Ul_BFu0i_S()
{
  {
    init_simple_test("Ul_BFu0i_S");
    static STRUCT_IF_C Ul_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_S, Ul_BFu0i_S)
//============================================================================


struct  Ul_BFu0i_Uc  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0i_Uc) C1{ FL Fi:0 Fc}



static void Test_Ul_BFu0i_Uc()
{
  {
    init_simple_test("Ul_BFu0i_Uc");
    static STRUCT_IF_C Ul_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_Uc, Ul_BFu0i_Uc)
//============================================================================


struct  Ul_BFu0i_Ui  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0i_Ui) C1{ FL Fi:0 Fi}



static void Test_Ul_BFu0i_Ui()
{
  {
    init_simple_test("Ul_BFu0i_Ui");
    static STRUCT_IF_C Ul_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_Ui, Ul_BFu0i_Ui)
//============================================================================


struct  Ul_BFu0i_Ul  {
  __tsu64 v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0i_Ul) C1{ FL Fi:0 FL}



static void Test_Ul_BFu0i_Ul()
{
  {
    init_simple_test("Ul_BFu0i_Ul");
    static STRUCT_IF_C Ul_BFu0i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_Ul, Ul_BFu0i_Ul)
//============================================================================


struct  Ul_BFu0i_Us  {
  __tsu64 v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0i_Us) C1{ FL Fi:0 Fs}



static void Test_Ul_BFu0i_Us()
{
  {
    init_simple_test("Ul_BFu0i_Us");
    static STRUCT_IF_C Ul_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_Us, Ul_BFu0i_Us)
//============================================================================


struct  Ul_BFu0i_Vp  {
  __tsu64 v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Ul_BFu0i_Vp) C1{ FL Fi:0 Fp}



static void Test_Ul_BFu0i_Vp()
{
  {
    init_simple_test("Ul_BFu0i_Vp");
    static STRUCT_IF_C Ul_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0i_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0i_Vp, Ul_BFu0i_Vp)
//============================================================================


struct  Ul_BFu0ll  {
  __tsu64 v1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0ll) C1{ FL FL:0}



static void Test_Ul_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0ll");
    static STRUCT_IF_C Ul_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll, Ul_BFu0ll)
//============================================================================


struct  Ul_BFu0ll_BFu0c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0ll_BFu0c) C1{ FL FL:0 Fc:0}



static void Test_Ul_BFu0ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0c");
    static STRUCT_IF_C Ul_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu0c, Ul_BFu0ll_BFu0c)
//============================================================================


struct  Ul_BFu0ll_BFu0i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0ll_BFu0i) C1{ FL FL:0 Fi:0}



static void Test_Ul_BFu0ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0i");
    static STRUCT_IF_C Ul_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu0i, Ul_BFu0ll_BFu0i)
//============================================================================


struct  Ul_BFu0ll_BFu0ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0ll_BFu0ll) C1{ FL FL:0 FL:0}



static void Test_Ul_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu0ll, Ul_BFu0ll_BFu0ll)
//============================================================================


struct  Ul_BFu0ll_BFu0s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0ll_BFu0s) C1{ FL FL:0 Fs:0}



static void Test_Ul_BFu0ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu0s");
    static STRUCT_IF_C Ul_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu0s, Ul_BFu0ll_BFu0s)
//============================================================================


struct  Ul_BFu0ll_BFu15i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0ll_BFu15i) C1{ FL FL:0 Fi:15}



static void Test_Ul_BFu0ll_BFu15i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu15i");
    static STRUCT_IF_C Ul_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu15i, Ul_BFu0ll_BFu15i)
//============================================================================


struct  Ul_BFu0ll_BFu15ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0ll_BFu15ll) C1{ FL FL:0 FL:15}



static void Test_Ul_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu15ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu15ll, Ul_BFu0ll_BFu15ll)
//============================================================================


struct  Ul_BFu0ll_BFu15s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0ll_BFu15s) C1{ FL FL:0 Fs:15}



static void Test_Ul_BFu0ll_BFu15s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu15s");
    static STRUCT_IF_C Ul_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu15s, Ul_BFu0ll_BFu15s)
//============================================================================


struct  Ul_BFu0ll_BFu16i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0ll_BFu16i) C1{ FL FL:0 Fi:16}



static void Test_Ul_BFu0ll_BFu16i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu16i");
    static STRUCT_IF_C Ul_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu16i, Ul_BFu0ll_BFu16i)
//============================================================================


struct  Ul_BFu0ll_BFu16ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0ll_BFu16ll) C1{ FL FL:0 FL:16}



static void Test_Ul_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu16ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu16ll, Ul_BFu0ll_BFu16ll)
//============================================================================


struct  Ul_BFu0ll_BFu16s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0ll_BFu16s) C1{ FL FL:0 Fs:16}



static void Test_Ul_BFu0ll_BFu16s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu16s");
    static STRUCT_IF_C Ul_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu16s, Ul_BFu0ll_BFu16s)
//============================================================================


struct  Ul_BFu0ll_BFu17i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0ll_BFu17i) C1{ FL FL:0 Fi:17}



static void Test_Ul_BFu0ll_BFu17i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu17i");
    static STRUCT_IF_C Ul_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu17i, Ul_BFu0ll_BFu17i)
//============================================================================


struct  Ul_BFu0ll_BFu17ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0ll_BFu17ll) C1{ FL FL:0 FL:17}



static void Test_Ul_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu17ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu17ll, Ul_BFu0ll_BFu17ll)
//============================================================================


struct  Ul_BFu0ll_BFu1c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1c) C1{ FL FL:0 Fc:1}



static void Test_Ul_BFu0ll_BFu1c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1c");
    static STRUCT_IF_C Ul_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu1c, Ul_BFu0ll_BFu1c)
//============================================================================


struct  Ul_BFu0ll_BFu1i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1i) C1{ FL FL:0 Fi:1}



static void Test_Ul_BFu0ll_BFu1i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1i");
    static STRUCT_IF_C Ul_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu1i, Ul_BFu0ll_BFu1i)
//============================================================================


struct  Ul_BFu0ll_BFu1ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1ll) C1{ FL FL:0 FL:1}



static void Test_Ul_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu1ll, Ul_BFu0ll_BFu1ll)
//============================================================================


struct  Ul_BFu0ll_BFu1s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0ll_BFu1s) C1{ FL FL:0 Fs:1}



static void Test_Ul_BFu0ll_BFu1s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu1s");
    static STRUCT_IF_C Ul_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu1s, Ul_BFu0ll_BFu1s)
//============================================================================


struct  Ul_BFu0ll_BFu31i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0ll_BFu31i) C1{ FL FL:0 Fi:31}



static void Test_Ul_BFu0ll_BFu31i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu31i");
    static STRUCT_IF_C Ul_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu31i, Ul_BFu0ll_BFu31i)
//============================================================================


struct  Ul_BFu0ll_BFu31ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0ll_BFu31ll) C1{ FL FL:0 FL:31}



static void Test_Ul_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu31ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu31ll, Ul_BFu0ll_BFu31ll)
//============================================================================


struct  Ul_BFu0ll_BFu32i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0ll_BFu32i) C1{ FL FL:0 Fi:32}



static void Test_Ul_BFu0ll_BFu32i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu32i");
    static STRUCT_IF_C Ul_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu32i, Ul_BFu0ll_BFu32i)
//============================================================================


struct  Ul_BFu0ll_BFu32ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0ll_BFu32ll) C1{ FL FL:0 FL:32}



static void Test_Ul_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu32ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu32ll, Ul_BFu0ll_BFu32ll)
//============================================================================


struct  Ul_BFu0ll_BFu33  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0ll_BFu33) C1{ FL FL:0 FL:33}



static void Test_Ul_BFu0ll_BFu33()
{
  {
    init_simple_test("Ul_BFu0ll_BFu33");
    static STRUCT_IF_C Ul_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu33, Ul_BFu0ll_BFu33)
//============================================================================


struct  Ul_BFu0ll_BFu7c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7c) C1{ FL FL:0 Fc:7}



static void Test_Ul_BFu0ll_BFu7c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7c");
    static STRUCT_IF_C Ul_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu7c, Ul_BFu0ll_BFu7c)
//============================================================================


struct  Ul_BFu0ll_BFu7i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7i) C1{ FL FL:0 Fi:7}



static void Test_Ul_BFu0ll_BFu7i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7i");
    static STRUCT_IF_C Ul_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu7i, Ul_BFu0ll_BFu7i)
//============================================================================


struct  Ul_BFu0ll_BFu7ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7ll) C1{ FL FL:0 FL:7}



static void Test_Ul_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu7ll, Ul_BFu0ll_BFu7ll)
//============================================================================


struct  Ul_BFu0ll_BFu7s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0ll_BFu7s) C1{ FL FL:0 Fs:7}



static void Test_Ul_BFu0ll_BFu7s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu7s");
    static STRUCT_IF_C Ul_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu7s, Ul_BFu0ll_BFu7s)
//============================================================================


struct  Ul_BFu0ll_BFu8c  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8c) C1{ FL FL:0 Fc:8}



static void Test_Ul_BFu0ll_BFu8c()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8c");
    static STRUCT_IF_C Ul_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu8c, Ul_BFu0ll_BFu8c)
//============================================================================


struct  Ul_BFu0ll_BFu8i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8i) C1{ FL FL:0 Fi:8}



static void Test_Ul_BFu0ll_BFu8i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8i");
    static STRUCT_IF_C Ul_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu8i, Ul_BFu0ll_BFu8i)
//============================================================================


struct  Ul_BFu0ll_BFu8ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8ll) C1{ FL FL:0 FL:8}



static void Test_Ul_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu8ll, Ul_BFu0ll_BFu8ll)
//============================================================================


struct  Ul_BFu0ll_BFu8s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0ll_BFu8s) C1{ FL FL:0 Fs:8}



static void Test_Ul_BFu0ll_BFu8s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu8s");
    static STRUCT_IF_C Ul_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu8s, Ul_BFu0ll_BFu8s)
//============================================================================


struct  Ul_BFu0ll_BFu9i  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0ll_BFu9i) C1{ FL FL:0 Fi:9}



static void Test_Ul_BFu0ll_BFu9i()
{
  {
    init_simple_test("Ul_BFu0ll_BFu9i");
    static STRUCT_IF_C Ul_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu9i, Ul_BFu0ll_BFu9i)
//============================================================================


struct  Ul_BFu0ll_BFu9ll  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0ll_BFu9ll) C1{ FL FL:0 FL:9}



static void Test_Ul_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0ll_BFu9ll");
    static STRUCT_IF_C Ul_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu9ll, Ul_BFu0ll_BFu9ll)
//============================================================================


struct  Ul_BFu0ll_BFu9s  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0ll_BFu9s) C1{ FL FL:0 Fs:9}



static void Test_Ul_BFu0ll_BFu9s()
{
  {
    init_simple_test("Ul_BFu0ll_BFu9s");
    static STRUCT_IF_C Ul_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_BFu9s, Ul_BFu0ll_BFu9s)
//============================================================================


struct  Ul_BFu0ll_C  {
  __tsu64 v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Ul_BFu0ll_C) C1{ FL FL:0 Fc}



static void Test_Ul_BFu0ll_C()
{
  {
    init_simple_test("Ul_BFu0ll_C");
    static STRUCT_IF_C Ul_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_C, Ul_BFu0ll_C)
//============================================================================


struct  Ul_BFu0ll_D  {
  __tsu64 v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Ul_BFu0ll_D) C1{ FL FL:0 FL}



static void Test_Ul_BFu0ll_D()
{
  {
    init_simple_test("Ul_BFu0ll_D");
    static STRUCT_IF_C Ul_BFu0ll_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_D, Ul_BFu0ll_D)
//============================================================================


struct  Ul_BFu0ll_F  {
  __tsu64 v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Ul_BFu0ll_F) C1{ FL FL:0 Fi}



static void Test_Ul_BFu0ll_F()
{
  {
    init_simple_test("Ul_BFu0ll_F");
    static STRUCT_IF_C Ul_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_F, Ul_BFu0ll_F)
//============================================================================


struct  Ul_BFu0ll_I  {
  __tsu64 v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Ul_BFu0ll_I) C1{ FL FL:0 Fi}



static void Test_Ul_BFu0ll_I()
{
  {
    init_simple_test("Ul_BFu0ll_I");
    static STRUCT_IF_C Ul_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_I, Ul_BFu0ll_I)
//============================================================================


struct  Ul_BFu0ll_Ip  {
  __tsu64 v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Ul_BFu0ll_Ip) C1{ FL FL:0 Fp}



static void Test_Ul_BFu0ll_Ip()
{
  {
    init_simple_test("Ul_BFu0ll_Ip");
    static STRUCT_IF_C Ul_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_Ip, Ul_BFu0ll_Ip)
//============================================================================


struct  Ul_BFu0ll_L  {
  __tsu64 v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0ll_L) C1{ FL FL:0 FL}



static void Test_Ul_BFu0ll_L()
{
  {
    init_simple_test("Ul_BFu0ll_L");
    static STRUCT_IF_C Ul_BFu0ll_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_L, Ul_BFu0ll_L)
//============================================================================


struct  Ul_BFu0ll_S  {
  __tsu64 v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Ul_BFu0ll_S) C1{ FL FL:0 Fs}



static void Test_Ul_BFu0ll_S()
{
  {
    init_simple_test("Ul_BFu0ll_S");
    static STRUCT_IF_C Ul_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_S, Ul_BFu0ll_S)
//============================================================================


struct  Ul_BFu0ll_Uc  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0ll_Uc) C1{ FL FL:0 Fc}



static void Test_Ul_BFu0ll_Uc()
{
  {
    init_simple_test("Ul_BFu0ll_Uc");
    static STRUCT_IF_C Ul_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_Uc, Ul_BFu0ll_Uc)
//============================================================================


struct  Ul_BFu0ll_Ui  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0ll_Ui) C1{ FL FL:0 Fi}



static void Test_Ul_BFu0ll_Ui()
{
  {
    init_simple_test("Ul_BFu0ll_Ui");
    static STRUCT_IF_C Ul_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_Ui, Ul_BFu0ll_Ui)
//============================================================================


struct  Ul_BFu0ll_Ul  {
  __tsu64 v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0ll_Ul) C1{ FL FL:0 FL}



static void Test_Ul_BFu0ll_Ul()
{
  {
    init_simple_test("Ul_BFu0ll_Ul");
    static STRUCT_IF_C Ul_BFu0ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_Ul, Ul_BFu0ll_Ul)
//============================================================================


struct  Ul_BFu0ll_Us  {
  __tsu64 v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0ll_Us) C1{ FL FL:0 Fs}



static void Test_Ul_BFu0ll_Us()
{
  {
    init_simple_test("Ul_BFu0ll_Us");
    static STRUCT_IF_C Ul_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_Us, Ul_BFu0ll_Us)
//============================================================================


struct  Ul_BFu0ll_Vp  {
  __tsu64 v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Ul_BFu0ll_Vp) C1{ FL FL:0 Fp}



static void Test_Ul_BFu0ll_Vp()
{
  {
    init_simple_test("Ul_BFu0ll_Vp");
    static STRUCT_IF_C Ul_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0ll_Vp, Ul_BFu0ll_Vp)
//============================================================================


struct  Ul_BFu0s  {
  __tsu64 v1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0s) C1{ FL Fs:0}



static void Test_Ul_BFu0s()
{
  {
    init_simple_test("Ul_BFu0s");
    static STRUCT_IF_C Ul_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s, Ul_BFu0s)
//============================================================================


struct  Ul_BFu0s_BFu0c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Ul_BFu0s_BFu0c) C1{ FL Fs:0 Fc:0}



static void Test_Ul_BFu0s_BFu0c()
{
  {
    init_simple_test("Ul_BFu0s_BFu0c");
    static STRUCT_IF_C Ul_BFu0s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu0c, Ul_BFu0s_BFu0c)
//============================================================================


struct  Ul_BFu0s_BFu0i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Ul_BFu0s_BFu0i) C1{ FL Fs:0 Fi:0}



static void Test_Ul_BFu0s_BFu0i()
{
  {
    init_simple_test("Ul_BFu0s_BFu0i");
    static STRUCT_IF_C Ul_BFu0s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu0i, Ul_BFu0s_BFu0i)
//============================================================================


struct  Ul_BFu0s_BFu0ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Ul_BFu0s_BFu0ll) C1{ FL Fs:0 FL:0}



static void Test_Ul_BFu0s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu0ll");
    static STRUCT_IF_C Ul_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu0ll, Ul_BFu0s_BFu0ll)
//============================================================================


struct  Ul_BFu0s_BFu0s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Ul_BFu0s_BFu0s) C1{ FL Fs:0 Fs:0}



static void Test_Ul_BFu0s_BFu0s()
{
  {
    init_simple_test("Ul_BFu0s_BFu0s");
    static STRUCT_IF_C Ul_BFu0s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Ul_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu0s, Ul_BFu0s_BFu0s)
//============================================================================


struct  Ul_BFu0s_BFu15i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Ul_BFu0s_BFu15i) C1{ FL Fs:0 Fi:15}



static void Test_Ul_BFu0s_BFu15i()
{
  {
    init_simple_test("Ul_BFu0s_BFu15i");
    static STRUCT_IF_C Ul_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu15i, Ul_BFu0s_BFu15i)
//============================================================================


struct  Ul_BFu0s_BFu15ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Ul_BFu0s_BFu15ll) C1{ FL Fs:0 FL:15}



static void Test_Ul_BFu0s_BFu15ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu15ll");
    static STRUCT_IF_C Ul_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu15ll, Ul_BFu0s_BFu15ll)
//============================================================================


struct  Ul_BFu0s_BFu15s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Ul_BFu0s_BFu15s) C1{ FL Fs:0 Fs:15}



static void Test_Ul_BFu0s_BFu15s()
{
  {
    init_simple_test("Ul_BFu0s_BFu15s");
    static STRUCT_IF_C Ul_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu15s, Ul_BFu0s_BFu15s)
//============================================================================


struct  Ul_BFu0s_BFu16i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Ul_BFu0s_BFu16i) C1{ FL Fs:0 Fi:16}



static void Test_Ul_BFu0s_BFu16i()
{
  {
    init_simple_test("Ul_BFu0s_BFu16i");
    static STRUCT_IF_C Ul_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu16i, Ul_BFu0s_BFu16i)
//============================================================================


struct  Ul_BFu0s_BFu16ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Ul_BFu0s_BFu16ll) C1{ FL Fs:0 FL:16}



static void Test_Ul_BFu0s_BFu16ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu16ll");
    static STRUCT_IF_C Ul_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu16ll, Ul_BFu0s_BFu16ll)
//============================================================================


struct  Ul_BFu0s_BFu16s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Ul_BFu0s_BFu16s) C1{ FL Fs:0 Fs:16}



static void Test_Ul_BFu0s_BFu16s()
{
  {
    init_simple_test("Ul_BFu0s_BFu16s");
    static STRUCT_IF_C Ul_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu16s, Ul_BFu0s_BFu16s)
//============================================================================


struct  Ul_BFu0s_BFu17i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Ul_BFu0s_BFu17i) C1{ FL Fs:0 Fi:17}



static void Test_Ul_BFu0s_BFu17i()
{
  {
    init_simple_test("Ul_BFu0s_BFu17i");
    static STRUCT_IF_C Ul_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu17i, Ul_BFu0s_BFu17i)
//============================================================================


struct  Ul_BFu0s_BFu17ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Ul_BFu0s_BFu17ll) C1{ FL Fs:0 FL:17}



static void Test_Ul_BFu0s_BFu17ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu17ll");
    static STRUCT_IF_C Ul_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu17ll, Ul_BFu0s_BFu17ll)
//============================================================================


struct  Ul_BFu0s_BFu1c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Ul_BFu0s_BFu1c) C1{ FL Fs:0 Fc:1}



static void Test_Ul_BFu0s_BFu1c()
{
  {
    init_simple_test("Ul_BFu0s_BFu1c");
    static STRUCT_IF_C Ul_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu1c, Ul_BFu0s_BFu1c)
//============================================================================


struct  Ul_BFu0s_BFu1i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Ul_BFu0s_BFu1i) C1{ FL Fs:0 Fi:1}



static void Test_Ul_BFu0s_BFu1i()
{
  {
    init_simple_test("Ul_BFu0s_BFu1i");
    static STRUCT_IF_C Ul_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu1i, Ul_BFu0s_BFu1i)
//============================================================================


struct  Ul_BFu0s_BFu1ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Ul_BFu0s_BFu1ll) C1{ FL Fs:0 FL:1}



static void Test_Ul_BFu0s_BFu1ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu1ll");
    static STRUCT_IF_C Ul_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu1ll, Ul_BFu0s_BFu1ll)
//============================================================================


struct  Ul_BFu0s_BFu1s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Ul_BFu0s_BFu1s) C1{ FL Fs:0 Fs:1}



static void Test_Ul_BFu0s_BFu1s()
{
  {
    init_simple_test("Ul_BFu0s_BFu1s");
    static STRUCT_IF_C Ul_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu1s, Ul_BFu0s_BFu1s)
//============================================================================


struct  Ul_BFu0s_BFu31i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Ul_BFu0s_BFu31i) C1{ FL Fs:0 Fi:31}



static void Test_Ul_BFu0s_BFu31i()
{
  {
    init_simple_test("Ul_BFu0s_BFu31i");
    static STRUCT_IF_C Ul_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu31i, Ul_BFu0s_BFu31i)
//============================================================================


struct  Ul_BFu0s_BFu31ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Ul_BFu0s_BFu31ll) C1{ FL Fs:0 FL:31}



static void Test_Ul_BFu0s_BFu31ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu31ll");
    static STRUCT_IF_C Ul_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu31ll, Ul_BFu0s_BFu31ll)
//============================================================================


struct  Ul_BFu0s_BFu32i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Ul_BFu0s_BFu32i) C1{ FL Fs:0 Fi:32}



static void Test_Ul_BFu0s_BFu32i()
{
  {
    init_simple_test("Ul_BFu0s_BFu32i");
    static STRUCT_IF_C Ul_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu32i, Ul_BFu0s_BFu32i)
//============================================================================


struct  Ul_BFu0s_BFu32ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Ul_BFu0s_BFu32ll) C1{ FL Fs:0 FL:32}



static void Test_Ul_BFu0s_BFu32ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu32ll");
    static STRUCT_IF_C Ul_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu32ll, Ul_BFu0s_BFu32ll)
//============================================================================


struct  Ul_BFu0s_BFu33  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Ul_BFu0s_BFu33) C1{ FL Fs:0 FL:33}



static void Test_Ul_BFu0s_BFu33()
{
  {
    init_simple_test("Ul_BFu0s_BFu33");
    static STRUCT_IF_C Ul_BFu0s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu33, Ul_BFu0s_BFu33)
//============================================================================


struct  Ul_BFu0s_BFu7c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Ul_BFu0s_BFu7c) C1{ FL Fs:0 Fc:7}



static void Test_Ul_BFu0s_BFu7c()
{
  {
    init_simple_test("Ul_BFu0s_BFu7c");
    static STRUCT_IF_C Ul_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu7c, Ul_BFu0s_BFu7c)
//============================================================================


struct  Ul_BFu0s_BFu7i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Ul_BFu0s_BFu7i) C1{ FL Fs:0 Fi:7}



static void Test_Ul_BFu0s_BFu7i()
{
  {
    init_simple_test("Ul_BFu0s_BFu7i");
    static STRUCT_IF_C Ul_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu7i, Ul_BFu0s_BFu7i)
//============================================================================


struct  Ul_BFu0s_BFu7ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Ul_BFu0s_BFu7ll) C1{ FL Fs:0 FL:7}



static void Test_Ul_BFu0s_BFu7ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu7ll");
    static STRUCT_IF_C Ul_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu7ll, Ul_BFu0s_BFu7ll)
//============================================================================


struct  Ul_BFu0s_BFu7s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Ul_BFu0s_BFu7s) C1{ FL Fs:0 Fs:7}



static void Test_Ul_BFu0s_BFu7s()
{
  {
    init_simple_test("Ul_BFu0s_BFu7s");
    static STRUCT_IF_C Ul_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu7s, Ul_BFu0s_BFu7s)
//============================================================================


struct  Ul_BFu0s_BFu8c  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Ul_BFu0s_BFu8c) C1{ FL Fs:0 Fc:8}



static void Test_Ul_BFu0s_BFu8c()
{
  {
    init_simple_test("Ul_BFu0s_BFu8c");
    static STRUCT_IF_C Ul_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu8c, Ul_BFu0s_BFu8c)
//============================================================================


struct  Ul_BFu0s_BFu8i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Ul_BFu0s_BFu8i) C1{ FL Fs:0 Fi:8}



static void Test_Ul_BFu0s_BFu8i()
{
  {
    init_simple_test("Ul_BFu0s_BFu8i");
    static STRUCT_IF_C Ul_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu8i, Ul_BFu0s_BFu8i)
//============================================================================


struct  Ul_BFu0s_BFu8ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Ul_BFu0s_BFu8ll) C1{ FL Fs:0 FL:8}



static void Test_Ul_BFu0s_BFu8ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu8ll");
    static STRUCT_IF_C Ul_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu8ll, Ul_BFu0s_BFu8ll)
//============================================================================


struct  Ul_BFu0s_BFu8s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Ul_BFu0s_BFu8s) C1{ FL Fs:0 Fs:8}



static void Test_Ul_BFu0s_BFu8s()
{
  {
    init_simple_test("Ul_BFu0s_BFu8s");
    static STRUCT_IF_C Ul_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu8s, Ul_BFu0s_BFu8s)
//============================================================================


struct  Ul_BFu0s_BFu9i  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Ul_BFu0s_BFu9i) C1{ FL Fs:0 Fi:9}



static void Test_Ul_BFu0s_BFu9i()
{
  {
    init_simple_test("Ul_BFu0s_BFu9i");
    static STRUCT_IF_C Ul_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu9i, Ul_BFu0s_BFu9i)
//============================================================================


struct  Ul_BFu0s_BFu9ll  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Ul_BFu0s_BFu9ll) C1{ FL Fs:0 FL:9}



static void Test_Ul_BFu0s_BFu9ll()
{
  {
    init_simple_test("Ul_BFu0s_BFu9ll");
    static STRUCT_IF_C Ul_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu9ll, Ul_BFu0s_BFu9ll)
//============================================================================


struct  Ul_BFu0s_BFu9s  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Ul_BFu0s_BFu9s) C1{ FL Fs:0 Fs:9}



static void Test_Ul_BFu0s_BFu9s()
{
  {
    init_simple_test("Ul_BFu0s_BFu9s");
    static STRUCT_IF_C Ul_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_BFu9s, Ul_BFu0s_BFu9s)
//============================================================================


struct  Ul_BFu0s_C  {
  __tsu64 v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Ul_BFu0s_C) C1{ FL Fs:0 Fc}



static void Test_Ul_BFu0s_C()
{
  {
    init_simple_test("Ul_BFu0s_C");
    static STRUCT_IF_C Ul_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_C.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_C, Ul_BFu0s_C)
//============================================================================


struct  Ul_BFu0s_D  {
  __tsu64 v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Ul_BFu0s_D) C1{ FL Fs:0 FL}



static void Test_Ul_BFu0s_D()
{
  {
    init_simple_test("Ul_BFu0s_D");
    static STRUCT_IF_C Ul_BFu0s_D lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_D.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_D, Ul_BFu0s_D)
//============================================================================


struct  Ul_BFu0s_F  {
  __tsu64 v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Ul_BFu0s_F) C1{ FL Fs:0 Fi}



static void Test_Ul_BFu0s_F()
{
  {
    init_simple_test("Ul_BFu0s_F");
    static STRUCT_IF_C Ul_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_F.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_F, Ul_BFu0s_F)
//============================================================================


struct  Ul_BFu0s_I  {
  __tsu64 v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Ul_BFu0s_I) C1{ FL Fs:0 Fi}



static void Test_Ul_BFu0s_I()
{
  {
    init_simple_test("Ul_BFu0s_I");
    static STRUCT_IF_C Ul_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_I.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_I, Ul_BFu0s_I)
//============================================================================


struct  Ul_BFu0s_Ip  {
  __tsu64 v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Ul_BFu0s_Ip) C1{ FL Fs:0 Fp}



static void Test_Ul_BFu0s_Ip()
{
  {
    init_simple_test("Ul_BFu0s_Ip");
    static STRUCT_IF_C Ul_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Ip.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_Ip, Ul_BFu0s_Ip)
//============================================================================


struct  Ul_BFu0s_L  {
  __tsu64 v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Ul_BFu0s_L) C1{ FL Fs:0 FL}



static void Test_Ul_BFu0s_L()
{
  {
    init_simple_test("Ul_BFu0s_L");
    static STRUCT_IF_C Ul_BFu0s_L lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_L.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_L, Ul_BFu0s_L)
//============================================================================


struct  Ul_BFu0s_S  {
  __tsu64 v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Ul_BFu0s_S) C1{ FL Fs:0 Fs}



static void Test_Ul_BFu0s_S()
{
  {
    init_simple_test("Ul_BFu0s_S");
    static STRUCT_IF_C Ul_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_S.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_S, Ul_BFu0s_S)
//============================================================================


struct  Ul_BFu0s_Uc  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Ul_BFu0s_Uc) C1{ FL Fs:0 Fc}



static void Test_Ul_BFu0s_Uc()
{
  {
    init_simple_test("Ul_BFu0s_Uc");
    static STRUCT_IF_C Ul_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_Uc, Ul_BFu0s_Uc)
//============================================================================


struct  Ul_BFu0s_Ui  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Ul_BFu0s_Ui) C1{ FL Fs:0 Fi}



static void Test_Ul_BFu0s_Ui()
{
  {
    init_simple_test("Ul_BFu0s_Ui");
    static STRUCT_IF_C Ul_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_Ui, Ul_BFu0s_Ui)
//============================================================================


struct  Ul_BFu0s_Ul  {
  __tsu64 v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Ul_BFu0s_Ul) C1{ FL Fs:0 FL}



static void Test_Ul_BFu0s_Ul()
{
  {
    init_simple_test("Ul_BFu0s_Ul");
    static STRUCT_IF_C Ul_BFu0s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Ul.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_Ul, Ul_BFu0s_Ul)
//============================================================================


struct  Ul_BFu0s_Us  {
  __tsu64 v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Ul_BFu0s_Us) C1{ FL Fs:0 Fs}



static void Test_Ul_BFu0s_Us()
{
  {
    init_simple_test("Ul_BFu0s_Us");
    static STRUCT_IF_C Ul_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Us.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_Us, Ul_BFu0s_Us)
//============================================================================


struct  Ul_BFu0s_Vp  {
  __tsu64 v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Ul_BFu0s_Vp) C1{ FL Fs:0 Fp}



static void Test_Ul_BFu0s_Vp()
{
  {
    init_simple_test("Ul_BFu0s_Vp");
    static STRUCT_IF_C Ul_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Ul_BFu0s_Vp.v1");
    check_field_offset(lv, v2, 8, "Ul_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu0s_Vp, Ul_BFu0s_Vp)
//============================================================================


struct  Ul_BFu15i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Ul_BFu15i_BFu0c) C1{ FL Fi:15 Fc:0}



static void Test_Ul_BFu15i_BFu0c()
{
  {
    init_simple_test("Ul_BFu15i_BFu0c");
    static STRUCT_IF_C Ul_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15i_BFu0c, Ul_BFu15i_BFu0c)
//============================================================================


struct  Ul_BFu15i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Ul_BFu15i_BFu0i) C1{ FL Fi:15 Fi:0}



static void Test_Ul_BFu15i_BFu0i()
{
  {
    init_simple_test("Ul_BFu15i_BFu0i");
    static STRUCT_IF_C Ul_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15i_BFu0i, Ul_BFu15i_BFu0i)
//============================================================================


struct  Ul_BFu15i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Ul_BFu15i_BFu0ll) C1{ FL Fi:15 FL:0}



static void Test_Ul_BFu15i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu15i_BFu0ll");
    static STRUCT_IF_C Ul_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15i_BFu0ll, Ul_BFu15i_BFu0ll)
//============================================================================


struct  Ul_BFu15i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Ul_BFu15i_BFu0s) C1{ FL Fi:15 Fs:0}



static void Test_Ul_BFu15i_BFu0s()
{
  {
    init_simple_test("Ul_BFu15i_BFu0s");
    static STRUCT_IF_C Ul_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15i_BFu0s, Ul_BFu15i_BFu0s)
//============================================================================


struct  Ul_BFu15ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Ul_BFu15ll_BFu0c) C1{ FL FL:15 Fc:0}



static void Test_Ul_BFu15ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0c");
    static STRUCT_IF_C Ul_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15ll_BFu0c, Ul_BFu15ll_BFu0c)
//============================================================================


struct  Ul_BFu15ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Ul_BFu15ll_BFu0i) C1{ FL FL:15 Fi:0}



static void Test_Ul_BFu15ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0i");
    static STRUCT_IF_C Ul_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15ll_BFu0i, Ul_BFu15ll_BFu0i)
//============================================================================


struct  Ul_BFu15ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Ul_BFu15ll_BFu0ll) C1{ FL FL:15 FL:0}



static void Test_Ul_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15ll_BFu0ll, Ul_BFu15ll_BFu0ll)
//============================================================================


struct  Ul_BFu15ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Ul_BFu15ll_BFu0s) C1{ FL FL:15 Fs:0}



static void Test_Ul_BFu15ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu15ll_BFu0s");
    static STRUCT_IF_C Ul_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15ll_BFu0s, Ul_BFu15ll_BFu0s)
//============================================================================


struct  Ul_BFu15s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Ul_BFu15s_BFu0c) C1{ FL Fs:15 Fc:0}



static void Test_Ul_BFu15s_BFu0c()
{
  {
    init_simple_test("Ul_BFu15s_BFu0c");
    static STRUCT_IF_C Ul_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15s_BFu0c, Ul_BFu15s_BFu0c)
//============================================================================


struct  Ul_BFu15s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Ul_BFu15s_BFu0i) C1{ FL Fs:15 Fi:0}



static void Test_Ul_BFu15s_BFu0i()
{
  {
    init_simple_test("Ul_BFu15s_BFu0i");
    static STRUCT_IF_C Ul_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15s_BFu0i, Ul_BFu15s_BFu0i)
//============================================================================


struct  Ul_BFu15s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Ul_BFu15s_BFu0ll) C1{ FL Fs:15 FL:0}



static void Test_Ul_BFu15s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu15s_BFu0ll");
    static STRUCT_IF_C Ul_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15s_BFu0ll, Ul_BFu15s_BFu0ll)
//============================================================================


struct  Ul_BFu15s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Ul_BFu15s_BFu0s) C1{ FL Fs:15 Fs:0}



static void Test_Ul_BFu15s_BFu0s()
{
  {
    init_simple_test("Ul_BFu15s_BFu0s");
    static STRUCT_IF_C Ul_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "Ul_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "Ul_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu15s_BFu0s, Ul_BFu15s_BFu0s)
//============================================================================


struct  Ul_BFu16i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Ul_BFu16i_BFu0c) C1{ FL Fi:16 Fc:0}



static void Test_Ul_BFu16i_BFu0c()
{
  {
    init_simple_test("Ul_BFu16i_BFu0c");
    static STRUCT_IF_C Ul_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16i_BFu0c, Ul_BFu16i_BFu0c)
//============================================================================


struct  Ul_BFu16i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Ul_BFu16i_BFu0i) C1{ FL Fi:16 Fi:0}



static void Test_Ul_BFu16i_BFu0i()
{
  {
    init_simple_test("Ul_BFu16i_BFu0i");
    static STRUCT_IF_C Ul_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16i_BFu0i, Ul_BFu16i_BFu0i)
//============================================================================


struct  Ul_BFu16i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Ul_BFu16i_BFu0ll) C1{ FL Fi:16 FL:0}



static void Test_Ul_BFu16i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu16i_BFu0ll");
    static STRUCT_IF_C Ul_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16i_BFu0ll, Ul_BFu16i_BFu0ll)
//============================================================================


struct  Ul_BFu16i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Ul_BFu16i_BFu0s) C1{ FL Fi:16 Fs:0}



static void Test_Ul_BFu16i_BFu0s()
{
  {
    init_simple_test("Ul_BFu16i_BFu0s");
    static STRUCT_IF_C Ul_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16i_BFu0s, Ul_BFu16i_BFu0s)
//============================================================================


struct  Ul_BFu16ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Ul_BFu16ll_BFu0c) C1{ FL FL:16 Fc:0}



static void Test_Ul_BFu16ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0c");
    static STRUCT_IF_C Ul_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16ll_BFu0c, Ul_BFu16ll_BFu0c)
//============================================================================


struct  Ul_BFu16ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Ul_BFu16ll_BFu0i) C1{ FL FL:16 Fi:0}



static void Test_Ul_BFu16ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0i");
    static STRUCT_IF_C Ul_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16ll_BFu0i, Ul_BFu16ll_BFu0i)
//============================================================================


struct  Ul_BFu16ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Ul_BFu16ll_BFu0ll) C1{ FL FL:16 FL:0}



static void Test_Ul_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16ll_BFu0ll, Ul_BFu16ll_BFu0ll)
//============================================================================


struct  Ul_BFu16ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Ul_BFu16ll_BFu0s) C1{ FL FL:16 Fs:0}



static void Test_Ul_BFu16ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu16ll_BFu0s");
    static STRUCT_IF_C Ul_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16ll_BFu0s, Ul_BFu16ll_BFu0s)
//============================================================================


struct  Ul_BFu16s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Ul_BFu16s_BFu0c) C1{ FL Fs:16 Fc:0}



static void Test_Ul_BFu16s_BFu0c()
{
  {
    init_simple_test("Ul_BFu16s_BFu0c");
    static STRUCT_IF_C Ul_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16s_BFu0c, Ul_BFu16s_BFu0c)
//============================================================================


struct  Ul_BFu16s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Ul_BFu16s_BFu0i) C1{ FL Fs:16 Fi:0}



static void Test_Ul_BFu16s_BFu0i()
{
  {
    init_simple_test("Ul_BFu16s_BFu0i");
    static STRUCT_IF_C Ul_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16s_BFu0i, Ul_BFu16s_BFu0i)
//============================================================================


struct  Ul_BFu16s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Ul_BFu16s_BFu0ll) C1{ FL Fs:16 FL:0}



static void Test_Ul_BFu16s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu16s_BFu0ll");
    static STRUCT_IF_C Ul_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16s_BFu0ll, Ul_BFu16s_BFu0ll)
//============================================================================


struct  Ul_BFu16s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Ul_BFu16s_BFu0s) C1{ FL Fs:16 Fs:0}



static void Test_Ul_BFu16s_BFu0s()
{
  {
    init_simple_test("Ul_BFu16s_BFu0s");
    static STRUCT_IF_C Ul_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "Ul_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "Ul_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu16s_BFu0s, Ul_BFu16s_BFu0s)
//============================================================================


struct  Ul_BFu17i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Ul_BFu17i_BFu0c) C1{ FL Fi:17 Fc:0}



static void Test_Ul_BFu17i_BFu0c()
{
  {
    init_simple_test("Ul_BFu17i_BFu0c");
    static STRUCT_IF_C Ul_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17i_BFu0c, Ul_BFu17i_BFu0c)
//============================================================================


struct  Ul_BFu17i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Ul_BFu17i_BFu0i) C1{ FL Fi:17 Fi:0}



static void Test_Ul_BFu17i_BFu0i()
{
  {
    init_simple_test("Ul_BFu17i_BFu0i");
    static STRUCT_IF_C Ul_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17i_BFu0i, Ul_BFu17i_BFu0i)
//============================================================================


struct  Ul_BFu17i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Ul_BFu17i_BFu0ll) C1{ FL Fi:17 FL:0}



static void Test_Ul_BFu17i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu17i_BFu0ll");
    static STRUCT_IF_C Ul_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17i_BFu0ll, Ul_BFu17i_BFu0ll)
//============================================================================


struct  Ul_BFu17i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Ul_BFu17i_BFu0s) C1{ FL Fi:17 Fs:0}



static void Test_Ul_BFu17i_BFu0s()
{
  {
    init_simple_test("Ul_BFu17i_BFu0s");
    static STRUCT_IF_C Ul_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17i_BFu0s, Ul_BFu17i_BFu0s)
//============================================================================


struct  Ul_BFu17ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Ul_BFu17ll_BFu0c) C1{ FL FL:17 Fc:0}



static void Test_Ul_BFu17ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0c");
    static STRUCT_IF_C Ul_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17ll_BFu0c, Ul_BFu17ll_BFu0c)
//============================================================================


struct  Ul_BFu17ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Ul_BFu17ll_BFu0i) C1{ FL FL:17 Fi:0}



static void Test_Ul_BFu17ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0i");
    static STRUCT_IF_C Ul_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17ll_BFu0i, Ul_BFu17ll_BFu0i)
//============================================================================


struct  Ul_BFu17ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Ul_BFu17ll_BFu0ll) C1{ FL FL:17 FL:0}



static void Test_Ul_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17ll_BFu0ll, Ul_BFu17ll_BFu0ll)
//============================================================================


struct  Ul_BFu17ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Ul_BFu17ll_BFu0s) C1{ FL FL:17 Fs:0}



static void Test_Ul_BFu17ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu17ll_BFu0s");
    static STRUCT_IF_C Ul_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "Ul_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "Ul_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu17ll_BFu0s, Ul_BFu17ll_BFu0s)
//============================================================================


struct  Ul_BFu1c_BFu0c  {
  __tsu64 v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1c_BFu0c) C1{ FL Fc:1 Fc:0}



static void Test_Ul_BFu1c_BFu0c()
{
  {
    init_simple_test("Ul_BFu1c_BFu0c");
    static STRUCT_IF_C Ul_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1c_BFu0c, Ul_BFu1c_BFu0c)
//============================================================================


struct  Ul_BFu1c_BFu0i  {
  __tsu64 v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1c_BFu0i) C1{ FL Fc:1 Fi:0}



static void Test_Ul_BFu1c_BFu0i()
{
  {
    init_simple_test("Ul_BFu1c_BFu0i");
    static STRUCT_IF_C Ul_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1c_BFu0i, Ul_BFu1c_BFu0i)
//============================================================================


struct  Ul_BFu1c_BFu0ll  {
  __tsu64 v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1c_BFu0ll) C1{ FL Fc:1 FL:0}



static void Test_Ul_BFu1c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1c_BFu0ll");
    static STRUCT_IF_C Ul_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1c_BFu0ll, Ul_BFu1c_BFu0ll)
//============================================================================


struct  Ul_BFu1c_BFu0s  {
  __tsu64 v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1c_BFu0s) C1{ FL Fc:1 Fs:0}



static void Test_Ul_BFu1c_BFu0s()
{
  {
    init_simple_test("Ul_BFu1c_BFu0s");
    static STRUCT_IF_C Ul_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1c_BFu0s, Ul_BFu1c_BFu0s)
//============================================================================


struct  Ul_BFu1i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1i_BFu0c) C1{ FL Fi:1 Fc:0}



static void Test_Ul_BFu1i_BFu0c()
{
  {
    init_simple_test("Ul_BFu1i_BFu0c");
    static STRUCT_IF_C Ul_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1i_BFu0c, Ul_BFu1i_BFu0c)
//============================================================================


struct  Ul_BFu1i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1i_BFu0i) C1{ FL Fi:1 Fi:0}



static void Test_Ul_BFu1i_BFu0i()
{
  {
    init_simple_test("Ul_BFu1i_BFu0i");
    static STRUCT_IF_C Ul_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1i_BFu0i, Ul_BFu1i_BFu0i)
//============================================================================


struct  Ul_BFu1i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1i_BFu0ll) C1{ FL Fi:1 FL:0}



static void Test_Ul_BFu1i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1i_BFu0ll");
    static STRUCT_IF_C Ul_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1i_BFu0ll, Ul_BFu1i_BFu0ll)
//============================================================================


struct  Ul_BFu1i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1i_BFu0s) C1{ FL Fi:1 Fs:0}



static void Test_Ul_BFu1i_BFu0s()
{
  {
    init_simple_test("Ul_BFu1i_BFu0s");
    static STRUCT_IF_C Ul_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1i_BFu0s, Ul_BFu1i_BFu0s)
//============================================================================


struct  Ul_BFu1ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1ll_BFu0c) C1{ FL FL:1 Fc:0}



static void Test_Ul_BFu1ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0c");
    static STRUCT_IF_C Ul_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1ll_BFu0c, Ul_BFu1ll_BFu0c)
//============================================================================


struct  Ul_BFu1ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1ll_BFu0i) C1{ FL FL:1 Fi:0}



static void Test_Ul_BFu1ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0i");
    static STRUCT_IF_C Ul_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1ll_BFu0i, Ul_BFu1ll_BFu0i)
//============================================================================


struct  Ul_BFu1ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1ll_BFu0ll) C1{ FL FL:1 FL:0}



static void Test_Ul_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1ll_BFu0ll, Ul_BFu1ll_BFu0ll)
//============================================================================


struct  Ul_BFu1ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1ll_BFu0s) C1{ FL FL:1 Fs:0}



static void Test_Ul_BFu1ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu1ll_BFu0s");
    static STRUCT_IF_C Ul_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1ll_BFu0s, Ul_BFu1ll_BFu0s)
//============================================================================


struct  Ul_BFu1s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Ul_BFu1s_BFu0c) C1{ FL Fs:1 Fc:0}



static void Test_Ul_BFu1s_BFu0c()
{
  {
    init_simple_test("Ul_BFu1s_BFu0c");
    static STRUCT_IF_C Ul_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1s_BFu0c, Ul_BFu1s_BFu0c)
//============================================================================


struct  Ul_BFu1s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Ul_BFu1s_BFu0i) C1{ FL Fs:1 Fi:0}



static void Test_Ul_BFu1s_BFu0i()
{
  {
    init_simple_test("Ul_BFu1s_BFu0i");
    static STRUCT_IF_C Ul_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1s_BFu0i, Ul_BFu1s_BFu0i)
//============================================================================


struct  Ul_BFu1s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Ul_BFu1s_BFu0ll) C1{ FL Fs:1 FL:0}



static void Test_Ul_BFu1s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu1s_BFu0ll");
    static STRUCT_IF_C Ul_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1s_BFu0ll, Ul_BFu1s_BFu0ll)
//============================================================================


struct  Ul_BFu1s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Ul_BFu1s_BFu0s) C1{ FL Fs:1 Fs:0}



static void Test_Ul_BFu1s_BFu0s()
{
  {
    init_simple_test("Ul_BFu1s_BFu0s");
    static STRUCT_IF_C Ul_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "Ul_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu1s_BFu0s, Ul_BFu1s_BFu0s)
//============================================================================


struct  Ul_BFu31i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Ul_BFu31i_BFu0c) C1{ FL Fi:31 Fc:0}



static void Test_Ul_BFu31i_BFu0c()
{
  {
    init_simple_test("Ul_BFu31i_BFu0c");
    static STRUCT_IF_C Ul_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31i_BFu0c, Ul_BFu31i_BFu0c)
//============================================================================


struct  Ul_BFu31i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Ul_BFu31i_BFu0i) C1{ FL Fi:31 Fi:0}



static void Test_Ul_BFu31i_BFu0i()
{
  {
    init_simple_test("Ul_BFu31i_BFu0i");
    static STRUCT_IF_C Ul_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31i_BFu0i, Ul_BFu31i_BFu0i)
//============================================================================


struct  Ul_BFu31i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Ul_BFu31i_BFu0ll) C1{ FL Fi:31 FL:0}



static void Test_Ul_BFu31i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu31i_BFu0ll");
    static STRUCT_IF_C Ul_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31i_BFu0ll, Ul_BFu31i_BFu0ll)
//============================================================================


struct  Ul_BFu31i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Ul_BFu31i_BFu0s) C1{ FL Fi:31 Fs:0}



static void Test_Ul_BFu31i_BFu0s()
{
  {
    init_simple_test("Ul_BFu31i_BFu0s");
    static STRUCT_IF_C Ul_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31i_BFu0s, Ul_BFu31i_BFu0s)
//============================================================================


struct  Ul_BFu31ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Ul_BFu31ll_BFu0c) C1{ FL FL:31 Fc:0}



static void Test_Ul_BFu31ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0c");
    static STRUCT_IF_C Ul_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31ll_BFu0c, Ul_BFu31ll_BFu0c)
//============================================================================


struct  Ul_BFu31ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Ul_BFu31ll_BFu0i) C1{ FL FL:31 Fi:0}



static void Test_Ul_BFu31ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0i");
    static STRUCT_IF_C Ul_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31ll_BFu0i, Ul_BFu31ll_BFu0i)
//============================================================================


struct  Ul_BFu31ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Ul_BFu31ll_BFu0ll) C1{ FL FL:31 FL:0}



static void Test_Ul_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31ll_BFu0ll, Ul_BFu31ll_BFu0ll)
//============================================================================


struct  Ul_BFu31ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Ul_BFu31ll_BFu0s) C1{ FL FL:31 Fs:0}



static void Test_Ul_BFu31ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu31ll_BFu0s");
    static STRUCT_IF_C Ul_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "Ul_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "Ul_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu31ll_BFu0s, Ul_BFu31ll_BFu0s)
//============================================================================


struct  Ul_BFu32i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Ul_BFu32i_BFu0c) C1{ FL Fi:32 Fc:0}



static void Test_Ul_BFu32i_BFu0c()
{
  {
    init_simple_test("Ul_BFu32i_BFu0c");
    static STRUCT_IF_C Ul_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32i_BFu0c, Ul_BFu32i_BFu0c)
//============================================================================


struct  Ul_BFu32i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Ul_BFu32i_BFu0i) C1{ FL Fi:32 Fi:0}



static void Test_Ul_BFu32i_BFu0i()
{
  {
    init_simple_test("Ul_BFu32i_BFu0i");
    static STRUCT_IF_C Ul_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32i_BFu0i, Ul_BFu32i_BFu0i)
//============================================================================


struct  Ul_BFu32i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Ul_BFu32i_BFu0ll) C1{ FL Fi:32 FL:0}



static void Test_Ul_BFu32i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu32i_BFu0ll");
    static STRUCT_IF_C Ul_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32i_BFu0ll, Ul_BFu32i_BFu0ll)
//============================================================================


struct  Ul_BFu32i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Ul_BFu32i_BFu0s) C1{ FL Fi:32 Fs:0}



static void Test_Ul_BFu32i_BFu0s()
{
  {
    init_simple_test("Ul_BFu32i_BFu0s");
    static STRUCT_IF_C Ul_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32i_BFu0s, Ul_BFu32i_BFu0s)
//============================================================================


struct  Ul_BFu32ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Ul_BFu32ll_BFu0c) C1{ FL FL:32 Fc:0}



static void Test_Ul_BFu32ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0c");
    static STRUCT_IF_C Ul_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32ll_BFu0c, Ul_BFu32ll_BFu0c)
//============================================================================


struct  Ul_BFu32ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Ul_BFu32ll_BFu0i) C1{ FL FL:32 Fi:0}



static void Test_Ul_BFu32ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0i");
    static STRUCT_IF_C Ul_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32ll_BFu0i, Ul_BFu32ll_BFu0i)
//============================================================================


struct  Ul_BFu32ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Ul_BFu32ll_BFu0ll) C1{ FL FL:32 FL:0}



static void Test_Ul_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32ll_BFu0ll, Ul_BFu32ll_BFu0ll)
//============================================================================


struct  Ul_BFu32ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Ul_BFu32ll_BFu0s) C1{ FL FL:32 Fs:0}



static void Test_Ul_BFu32ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu32ll_BFu0s");
    static STRUCT_IF_C Ul_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "Ul_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "Ul_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu32ll_BFu0s, Ul_BFu32ll_BFu0s)
//============================================================================


struct  Ul_BFu33_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Ul_BFu33_BFu0c) C1{ FL FL:33 Fc:0}



static void Test_Ul_BFu33_BFu0c()
{
  {
    init_simple_test("Ul_BFu33_BFu0c");
    static STRUCT_IF_C Ul_BFu33_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu33_BFu0c, Ul_BFu33_BFu0c)
//============================================================================


struct  Ul_BFu33_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Ul_BFu33_BFu0i) C1{ FL FL:33 Fi:0}



static void Test_Ul_BFu33_BFu0i()
{
  {
    init_simple_test("Ul_BFu33_BFu0i");
    static STRUCT_IF_C Ul_BFu33_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu33_BFu0i, Ul_BFu33_BFu0i)
//============================================================================


struct  Ul_BFu33_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Ul_BFu33_BFu0ll) C1{ FL FL:33 FL:0}



static void Test_Ul_BFu33_BFu0ll()
{
  {
    init_simple_test("Ul_BFu33_BFu0ll");
    static STRUCT_IF_C Ul_BFu33_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu33_BFu0ll, Ul_BFu33_BFu0ll)
//============================================================================


struct  Ul_BFu33_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Ul_BFu33_BFu0s) C1{ FL FL:33 Fs:0}



static void Test_Ul_BFu33_BFu0s()
{
  {
    init_simple_test("Ul_BFu33_BFu0s");
    static STRUCT_IF_C Ul_BFu33_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "Ul_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "Ul_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu33_BFu0s, Ul_BFu33_BFu0s)
//============================================================================


struct  Ul_BFu7c_BFu0c  {
  __tsu64 v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7c_BFu0c) C1{ FL Fc:7 Fc:0}



static void Test_Ul_BFu7c_BFu0c()
{
  {
    init_simple_test("Ul_BFu7c_BFu0c");
    static STRUCT_IF_C Ul_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7c_BFu0c, Ul_BFu7c_BFu0c)
//============================================================================


struct  Ul_BFu7c_BFu0i  {
  __tsu64 v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7c_BFu0i) C1{ FL Fc:7 Fi:0}



static void Test_Ul_BFu7c_BFu0i()
{
  {
    init_simple_test("Ul_BFu7c_BFu0i");
    static STRUCT_IF_C Ul_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7c_BFu0i, Ul_BFu7c_BFu0i)
//============================================================================


struct  Ul_BFu7c_BFu0ll  {
  __tsu64 v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7c_BFu0ll) C1{ FL Fc:7 FL:0}



static void Test_Ul_BFu7c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7c_BFu0ll");
    static STRUCT_IF_C Ul_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7c_BFu0ll, Ul_BFu7c_BFu0ll)
//============================================================================


struct  Ul_BFu7c_BFu0s  {
  __tsu64 v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7c_BFu0s) C1{ FL Fc:7 Fs:0}



static void Test_Ul_BFu7c_BFu0s()
{
  {
    init_simple_test("Ul_BFu7c_BFu0s");
    static STRUCT_IF_C Ul_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7c_BFu0s, Ul_BFu7c_BFu0s)
//============================================================================


struct  Ul_BFu7i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7i_BFu0c) C1{ FL Fi:7 Fc:0}



static void Test_Ul_BFu7i_BFu0c()
{
  {
    init_simple_test("Ul_BFu7i_BFu0c");
    static STRUCT_IF_C Ul_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7i_BFu0c, Ul_BFu7i_BFu0c)
//============================================================================


struct  Ul_BFu7i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7i_BFu0i) C1{ FL Fi:7 Fi:0}



static void Test_Ul_BFu7i_BFu0i()
{
  {
    init_simple_test("Ul_BFu7i_BFu0i");
    static STRUCT_IF_C Ul_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7i_BFu0i, Ul_BFu7i_BFu0i)
//============================================================================


struct  Ul_BFu7i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7i_BFu0ll) C1{ FL Fi:7 FL:0}



static void Test_Ul_BFu7i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7i_BFu0ll");
    static STRUCT_IF_C Ul_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7i_BFu0ll, Ul_BFu7i_BFu0ll)
//============================================================================


struct  Ul_BFu7i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7i_BFu0s) C1{ FL Fi:7 Fs:0}



static void Test_Ul_BFu7i_BFu0s()
{
  {
    init_simple_test("Ul_BFu7i_BFu0s");
    static STRUCT_IF_C Ul_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7i_BFu0s, Ul_BFu7i_BFu0s)
//============================================================================


struct  Ul_BFu7ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7ll_BFu0c) C1{ FL FL:7 Fc:0}



static void Test_Ul_BFu7ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0c");
    static STRUCT_IF_C Ul_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7ll_BFu0c, Ul_BFu7ll_BFu0c)
//============================================================================


struct  Ul_BFu7ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7ll_BFu0i) C1{ FL FL:7 Fi:0}



static void Test_Ul_BFu7ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0i");
    static STRUCT_IF_C Ul_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7ll_BFu0i, Ul_BFu7ll_BFu0i)
//============================================================================


struct  Ul_BFu7ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7ll_BFu0ll) C1{ FL FL:7 FL:0}



static void Test_Ul_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7ll_BFu0ll, Ul_BFu7ll_BFu0ll)
//============================================================================


struct  Ul_BFu7ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7ll_BFu0s) C1{ FL FL:7 Fs:0}



static void Test_Ul_BFu7ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu7ll_BFu0s");
    static STRUCT_IF_C Ul_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7ll_BFu0s, Ul_BFu7ll_BFu0s)
//============================================================================


struct  Ul_BFu7s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Ul_BFu7s_BFu0c) C1{ FL Fs:7 Fc:0}



static void Test_Ul_BFu7s_BFu0c()
{
  {
    init_simple_test("Ul_BFu7s_BFu0c");
    static STRUCT_IF_C Ul_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7s_BFu0c, Ul_BFu7s_BFu0c)
//============================================================================


struct  Ul_BFu7s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Ul_BFu7s_BFu0i) C1{ FL Fs:7 Fi:0}



static void Test_Ul_BFu7s_BFu0i()
{
  {
    init_simple_test("Ul_BFu7s_BFu0i");
    static STRUCT_IF_C Ul_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7s_BFu0i, Ul_BFu7s_BFu0i)
//============================================================================


struct  Ul_BFu7s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Ul_BFu7s_BFu0ll) C1{ FL Fs:7 FL:0}



static void Test_Ul_BFu7s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu7s_BFu0ll");
    static STRUCT_IF_C Ul_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7s_BFu0ll, Ul_BFu7s_BFu0ll)
//============================================================================


struct  Ul_BFu7s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Ul_BFu7s_BFu0s) C1{ FL Fs:7 Fs:0}



static void Test_Ul_BFu7s_BFu0s()
{
  {
    init_simple_test("Ul_BFu7s_BFu0s");
    static STRUCT_IF_C Ul_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "Ul_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "Ul_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu7s_BFu0s, Ul_BFu7s_BFu0s)
//============================================================================


struct  Ul_BFu8c_BFu0c  {
  __tsu64 v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8c_BFu0c) C1{ FL Fc:8 Fc:0}



static void Test_Ul_BFu8c_BFu0c()
{
  {
    init_simple_test("Ul_BFu8c_BFu0c");
    static STRUCT_IF_C Ul_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8c_BFu0c, Ul_BFu8c_BFu0c)
//============================================================================


struct  Ul_BFu8c_BFu0i  {
  __tsu64 v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8c_BFu0i) C1{ FL Fc:8 Fi:0}



static void Test_Ul_BFu8c_BFu0i()
{
  {
    init_simple_test("Ul_BFu8c_BFu0i");
    static STRUCT_IF_C Ul_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8c_BFu0i, Ul_BFu8c_BFu0i)
//============================================================================


struct  Ul_BFu8c_BFu0ll  {
  __tsu64 v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8c_BFu0ll) C1{ FL Fc:8 FL:0}



static void Test_Ul_BFu8c_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8c_BFu0ll");
    static STRUCT_IF_C Ul_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8c_BFu0ll, Ul_BFu8c_BFu0ll)
//============================================================================


struct  Ul_BFu8c_BFu0s  {
  __tsu64 v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8c_BFu0s) C1{ FL Fc:8 Fs:0}



static void Test_Ul_BFu8c_BFu0s()
{
  {
    init_simple_test("Ul_BFu8c_BFu0s");
    static STRUCT_IF_C Ul_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8c_BFu0s, Ul_BFu8c_BFu0s)
//============================================================================


struct  Ul_BFu8i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8i_BFu0c) C1{ FL Fi:8 Fc:0}



static void Test_Ul_BFu8i_BFu0c()
{
  {
    init_simple_test("Ul_BFu8i_BFu0c");
    static STRUCT_IF_C Ul_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8i_BFu0c, Ul_BFu8i_BFu0c)
//============================================================================


struct  Ul_BFu8i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8i_BFu0i) C1{ FL Fi:8 Fi:0}



static void Test_Ul_BFu8i_BFu0i()
{
  {
    init_simple_test("Ul_BFu8i_BFu0i");
    static STRUCT_IF_C Ul_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8i_BFu0i, Ul_BFu8i_BFu0i)
//============================================================================


struct  Ul_BFu8i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8i_BFu0ll) C1{ FL Fi:8 FL:0}



static void Test_Ul_BFu8i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8i_BFu0ll");
    static STRUCT_IF_C Ul_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8i_BFu0ll, Ul_BFu8i_BFu0ll)
//============================================================================


struct  Ul_BFu8i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8i_BFu0s) C1{ FL Fi:8 Fs:0}



static void Test_Ul_BFu8i_BFu0s()
{
  {
    init_simple_test("Ul_BFu8i_BFu0s");
    static STRUCT_IF_C Ul_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8i_BFu0s, Ul_BFu8i_BFu0s)
//============================================================================


struct  Ul_BFu8ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8ll_BFu0c) C1{ FL FL:8 Fc:0}



static void Test_Ul_BFu8ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0c");
    static STRUCT_IF_C Ul_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8ll_BFu0c, Ul_BFu8ll_BFu0c)
//============================================================================


struct  Ul_BFu8ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8ll_BFu0i) C1{ FL FL:8 Fi:0}



static void Test_Ul_BFu8ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0i");
    static STRUCT_IF_C Ul_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8ll_BFu0i, Ul_BFu8ll_BFu0i)
//============================================================================


struct  Ul_BFu8ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8ll_BFu0ll) C1{ FL FL:8 FL:0}



static void Test_Ul_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8ll_BFu0ll, Ul_BFu8ll_BFu0ll)
//============================================================================


struct  Ul_BFu8ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8ll_BFu0s) C1{ FL FL:8 Fs:0}



static void Test_Ul_BFu8ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu8ll_BFu0s");
    static STRUCT_IF_C Ul_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8ll_BFu0s, Ul_BFu8ll_BFu0s)
//============================================================================


struct  Ul_BFu8s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Ul_BFu8s_BFu0c) C1{ FL Fs:8 Fc:0}



static void Test_Ul_BFu8s_BFu0c()
{
  {
    init_simple_test("Ul_BFu8s_BFu0c");
    static STRUCT_IF_C Ul_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8s_BFu0c, Ul_BFu8s_BFu0c)
//============================================================================


struct  Ul_BFu8s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Ul_BFu8s_BFu0i) C1{ FL Fs:8 Fi:0}



static void Test_Ul_BFu8s_BFu0i()
{
  {
    init_simple_test("Ul_BFu8s_BFu0i");
    static STRUCT_IF_C Ul_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8s_BFu0i, Ul_BFu8s_BFu0i)
//============================================================================


struct  Ul_BFu8s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Ul_BFu8s_BFu0ll) C1{ FL Fs:8 FL:0}



static void Test_Ul_BFu8s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu8s_BFu0ll");
    static STRUCT_IF_C Ul_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8s_BFu0ll, Ul_BFu8s_BFu0ll)
//============================================================================


struct  Ul_BFu8s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Ul_BFu8s_BFu0s) C1{ FL Fs:8 Fs:0}



static void Test_Ul_BFu8s_BFu0s()
{
  {
    init_simple_test("Ul_BFu8s_BFu0s");
    static STRUCT_IF_C Ul_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "Ul_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "Ul_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu8s_BFu0s, Ul_BFu8s_BFu0s)
//============================================================================


struct  Ul_BFu9i_BFu0c  {
  __tsu64 v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Ul_BFu9i_BFu0c) C1{ FL Fi:9 Fc:0}



static void Test_Ul_BFu9i_BFu0c()
{
  {
    init_simple_test("Ul_BFu9i_BFu0c");
    static STRUCT_IF_C Ul_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9i_BFu0c, Ul_BFu9i_BFu0c)
//============================================================================


struct  Ul_BFu9i_BFu0i  {
  __tsu64 v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Ul_BFu9i_BFu0i) C1{ FL Fi:9 Fi:0}



static void Test_Ul_BFu9i_BFu0i()
{
  {
    init_simple_test("Ul_BFu9i_BFu0i");
    static STRUCT_IF_C Ul_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9i_BFu0i, Ul_BFu9i_BFu0i)
//============================================================================


struct  Ul_BFu9i_BFu0ll  {
  __tsu64 v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Ul_BFu9i_BFu0ll) C1{ FL Fi:9 FL:0}



static void Test_Ul_BFu9i_BFu0ll()
{
  {
    init_simple_test("Ul_BFu9i_BFu0ll");
    static STRUCT_IF_C Ul_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9i_BFu0ll, Ul_BFu9i_BFu0ll)
//============================================================================


struct  Ul_BFu9i_BFu0s  {
  __tsu64 v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Ul_BFu9i_BFu0s) C1{ FL Fi:9 Fs:0}



static void Test_Ul_BFu9i_BFu0s()
{
  {
    init_simple_test("Ul_BFu9i_BFu0s");
    static STRUCT_IF_C Ul_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9i_BFu0s, Ul_BFu9i_BFu0s)
//============================================================================


struct  Ul_BFu9ll_BFu0c  {
  __tsu64 v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Ul_BFu9ll_BFu0c) C1{ FL FL:9 Fc:0}



static void Test_Ul_BFu9ll_BFu0c()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0c");
    static STRUCT_IF_C Ul_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9ll_BFu0c, Ul_BFu9ll_BFu0c)
//============================================================================


struct  Ul_BFu9ll_BFu0i  {
  __tsu64 v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Ul_BFu9ll_BFu0i) C1{ FL FL:9 Fi:0}



static void Test_Ul_BFu9ll_BFu0i()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0i");
    static STRUCT_IF_C Ul_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9ll_BFu0i, Ul_BFu9ll_BFu0i)
//============================================================================


struct  Ul_BFu9ll_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Ul_BFu9ll_BFu0ll) C1{ FL FL:9 FL:0}



static void Test_Ul_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0ll");
    static STRUCT_IF_C Ul_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9ll_BFu0ll, Ul_BFu9ll_BFu0ll)
//============================================================================


struct  Ul_BFu9ll_BFu0s  {
  __tsu64 v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Ul_BFu9ll_BFu0s) C1{ FL FL:9 Fs:0}



static void Test_Ul_BFu9ll_BFu0s()
{
  {
    init_simple_test("Ul_BFu9ll_BFu0s");
    static STRUCT_IF_C Ul_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9ll_BFu0s, Ul_BFu9ll_BFu0s)
//============================================================================


struct  Ul_BFu9s_BFu0c  {
  __tsu64 v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Ul_BFu9s_BFu0c) C1{ FL Fs:9 Fc:0}



static void Test_Ul_BFu9s_BFu0c()
{
  {
    init_simple_test("Ul_BFu9s_BFu0c");
    static STRUCT_IF_C Ul_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9s_BFu0c, Ul_BFu9s_BFu0c)
//============================================================================


struct  Ul_BFu9s_BFu0i  {
  __tsu64 v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Ul_BFu9s_BFu0i) C1{ FL Fs:9 Fi:0}



static void Test_Ul_BFu9s_BFu0i()
{
  {
    init_simple_test("Ul_BFu9s_BFu0i");
    static STRUCT_IF_C Ul_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9s_BFu0i, Ul_BFu9s_BFu0i)
//============================================================================


struct  Ul_BFu9s_BFu0ll  {
  __tsu64 v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Ul_BFu9s_BFu0ll) C1{ FL Fs:9 FL:0}



static void Test_Ul_BFu9s_BFu0ll()
{
  {
    init_simple_test("Ul_BFu9s_BFu0ll");
    static STRUCT_IF_C Ul_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9s_BFu0ll, Ul_BFu9s_BFu0ll)
//============================================================================


struct  Ul_BFu9s_BFu0s  {
  __tsu64 v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Ul_BFu9s_BFu0s) C1{ FL Fs:9 Fs:0}



static void Test_Ul_BFu9s_BFu0s()
{
  {
    init_simple_test("Ul_BFu9s_BFu0s");
    static STRUCT_IF_C Ul_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "Ul_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "Ul_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_BFu9s_BFu0s, Ul_BFu9s_BFu0s)
//============================================================================


struct  Ul_C_BFu0c  {
  __tsu64 v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Ul_C_BFu0c) C1{ FL Fc Fc:0}



static void Test_Ul_C_BFu0c()
{
  {
    init_simple_test("Ul_C_BFu0c");
    static STRUCT_IF_C Ul_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_C_BFu0c, Ul_C_BFu0c)
//============================================================================


struct  Ul_C_BFu0i  {
  __tsu64 v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Ul_C_BFu0i) C1{ FL Fc Fi:0}



static void Test_Ul_C_BFu0i()
{
  {
    init_simple_test("Ul_C_BFu0i");
    static STRUCT_IF_C Ul_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_C_BFu0i, Ul_C_BFu0i)
//============================================================================


struct  Ul_C_BFu0ll  {
  __tsu64 v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Ul_C_BFu0ll) C1{ FL Fc FL:0}



static void Test_Ul_C_BFu0ll()
{
  {
    init_simple_test("Ul_C_BFu0ll");
    static STRUCT_IF_C Ul_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_C_BFu0ll, Ul_C_BFu0ll)
//============================================================================


struct  Ul_C_BFu0s  {
  __tsu64 v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Ul_C_BFu0s) C1{ FL Fc Fs:0}



static void Test_Ul_C_BFu0s()
{
  {
    init_simple_test("Ul_C_BFu0s");
    static STRUCT_IF_C Ul_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_C_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_C_BFu0s, Ul_C_BFu0s)
//============================================================================


struct  Ul_D_BFu0c  {
  __tsu64 v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Ul_D_BFu0c) C1{ FL[2] Fc:0}



static void Test_Ul_D_BFu0c()
{
  {
    init_simple_test("Ul_D_BFu0c");
    static STRUCT_IF_C Ul_D_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_D_BFu0c, Ul_D_BFu0c)
//============================================================================


struct  Ul_D_BFu0i  {
  __tsu64 v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Ul_D_BFu0i) C1{ FL[2] Fi:0}



static void Test_Ul_D_BFu0i()
{
  {
    init_simple_test("Ul_D_BFu0i");
    static STRUCT_IF_C Ul_D_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_D_BFu0i, Ul_D_BFu0i)
//============================================================================


struct  Ul_D_BFu0ll  {
  __tsu64 v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Ul_D_BFu0ll) C1{ FL[2] FL:0}



static void Test_Ul_D_BFu0ll()
{
  {
    init_simple_test("Ul_D_BFu0ll");
    static STRUCT_IF_C Ul_D_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_D_BFu0ll, Ul_D_BFu0ll)
//============================================================================


struct  Ul_D_BFu0s  {
  __tsu64 v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Ul_D_BFu0s) C1{ FL[2] Fs:0}



static void Test_Ul_D_BFu0s()
{
  {
    init_simple_test("Ul_D_BFu0s");
    static STRUCT_IF_C Ul_D_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_D_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_D_BFu0s, Ul_D_BFu0s)
//============================================================================


struct  Ul_F_BFu0c  {
  __tsu64 v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Ul_F_BFu0c) C1{ FL Fi Fc:0}



static void Test_Ul_F_BFu0c()
{
  {
    init_simple_test("Ul_F_BFu0c");
    static STRUCT_IF_C Ul_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_F_BFu0c, Ul_F_BFu0c)
//============================================================================


struct  Ul_F_BFu0i  {
  __tsu64 v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Ul_F_BFu0i) C1{ FL Fi Fi:0}



static void Test_Ul_F_BFu0i()
{
  {
    init_simple_test("Ul_F_BFu0i");
    static STRUCT_IF_C Ul_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_F_BFu0i, Ul_F_BFu0i)
//============================================================================


struct  Ul_F_BFu0ll  {
  __tsu64 v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Ul_F_BFu0ll) C1{ FL Fi FL:0}



static void Test_Ul_F_BFu0ll()
{
  {
    init_simple_test("Ul_F_BFu0ll");
    static STRUCT_IF_C Ul_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_F_BFu0ll, Ul_F_BFu0ll)
//============================================================================


struct  Ul_F_BFu0s  {
  __tsu64 v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Ul_F_BFu0s) C1{ FL Fi Fs:0}



static void Test_Ul_F_BFu0s()
{
  {
    init_simple_test("Ul_F_BFu0s");
    static STRUCT_IF_C Ul_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_F_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_F_BFu0s, Ul_F_BFu0s)
//============================================================================


struct  Ul_I_BFu0c  {
  __tsu64 v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Ul_I_BFu0c) C1{ FL Fi Fc:0}



static void Test_Ul_I_BFu0c()
{
  {
    init_simple_test("Ul_I_BFu0c");
    static STRUCT_IF_C Ul_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_I_BFu0c, Ul_I_BFu0c)
//============================================================================


struct  Ul_I_BFu0i  {
  __tsu64 v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Ul_I_BFu0i) C1{ FL Fi Fi:0}



static void Test_Ul_I_BFu0i()
{
  {
    init_simple_test("Ul_I_BFu0i");
    static STRUCT_IF_C Ul_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_I_BFu0i, Ul_I_BFu0i)
//============================================================================


struct  Ul_I_BFu0ll  {
  __tsu64 v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Ul_I_BFu0ll) C1{ FL Fi FL:0}



static void Test_Ul_I_BFu0ll()
{
  {
    init_simple_test("Ul_I_BFu0ll");
    static STRUCT_IF_C Ul_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_I_BFu0ll, Ul_I_BFu0ll)
//============================================================================


struct  Ul_I_BFu0s  {
  __tsu64 v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Ul_I_BFu0s) C1{ FL Fi Fs:0}



static void Test_Ul_I_BFu0s()
{
  {
    init_simple_test("Ul_I_BFu0s");
    static STRUCT_IF_C Ul_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_I_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_I_BFu0s, Ul_I_BFu0s)
//============================================================================


struct  Ul_Ip_BFu0c  {
  __tsu64 v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Ul_Ip_BFu0c) C1{ FL Fp Fc:0}



static void Test_Ul_Ip_BFu0c()
{
  {
    init_simple_test("Ul_Ip_BFu0c");
    static STRUCT_IF_C Ul_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ip_BFu0c, Ul_Ip_BFu0c)
//============================================================================


struct  Ul_Ip_BFu0i  {
  __tsu64 v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Ul_Ip_BFu0i) C1{ FL Fp Fi:0}



static void Test_Ul_Ip_BFu0i()
{
  {
    init_simple_test("Ul_Ip_BFu0i");
    static STRUCT_IF_C Ul_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ip_BFu0i, Ul_Ip_BFu0i)
//============================================================================


struct  Ul_Ip_BFu0ll  {
  __tsu64 v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Ul_Ip_BFu0ll) C1{ FL Fp FL:0}



static void Test_Ul_Ip_BFu0ll()
{
  {
    init_simple_test("Ul_Ip_BFu0ll");
    static STRUCT_IF_C Ul_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ip_BFu0ll, Ul_Ip_BFu0ll)
//============================================================================


struct  Ul_Ip_BFu0s  {
  __tsu64 v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Ul_Ip_BFu0s) C1{ FL Fp Fs:0}



static void Test_Ul_Ip_BFu0s()
{
  {
    init_simple_test("Ul_Ip_BFu0s");
    static STRUCT_IF_C Ul_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Ip_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ip_BFu0s, Ul_Ip_BFu0s)
//============================================================================


struct  Ul_L_BFu0c  {
  __tsu64 v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Ul_L_BFu0c) C1{ FL[2] Fc:0}



static void Test_Ul_L_BFu0c()
{
  {
    init_simple_test("Ul_L_BFu0c");
    static STRUCT_IF_C Ul_L_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_L_BFu0c, Ul_L_BFu0c)
//============================================================================


struct  Ul_L_BFu0i  {
  __tsu64 v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Ul_L_BFu0i) C1{ FL[2] Fi:0}



static void Test_Ul_L_BFu0i()
{
  {
    init_simple_test("Ul_L_BFu0i");
    static STRUCT_IF_C Ul_L_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_L_BFu0i, Ul_L_BFu0i)
//============================================================================


struct  Ul_L_BFu0ll  {
  __tsu64 v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Ul_L_BFu0ll) C1{ FL[2] FL:0}



static void Test_Ul_L_BFu0ll()
{
  {
    init_simple_test("Ul_L_BFu0ll");
    static STRUCT_IF_C Ul_L_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_L_BFu0ll, Ul_L_BFu0ll)
//============================================================================


struct  Ul_L_BFu0s  {
  __tsu64 v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Ul_L_BFu0s) C1{ FL[2] Fs:0}



static void Test_Ul_L_BFu0s()
{
  {
    init_simple_test("Ul_L_BFu0s");
    static STRUCT_IF_C Ul_L_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_L_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_L_BFu0s, Ul_L_BFu0s)
//============================================================================


struct  Ul_S_BFu0c  {
  __tsu64 v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Ul_S_BFu0c) C1{ FL Fs Fc:0}



static void Test_Ul_S_BFu0c()
{
  {
    init_simple_test("Ul_S_BFu0c");
    static STRUCT_IF_C Ul_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_S_BFu0c, Ul_S_BFu0c)
//============================================================================


struct  Ul_S_BFu0i  {
  __tsu64 v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Ul_S_BFu0i) C1{ FL Fs Fi:0}



static void Test_Ul_S_BFu0i()
{
  {
    init_simple_test("Ul_S_BFu0i");
    static STRUCT_IF_C Ul_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_S_BFu0i, Ul_S_BFu0i)
//============================================================================


struct  Ul_S_BFu0ll  {
  __tsu64 v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Ul_S_BFu0ll) C1{ FL Fs FL:0}



static void Test_Ul_S_BFu0ll()
{
  {
    init_simple_test("Ul_S_BFu0ll");
    static STRUCT_IF_C Ul_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_S_BFu0ll, Ul_S_BFu0ll)
//============================================================================


struct  Ul_S_BFu0s  {
  __tsu64 v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Ul_S_BFu0s) C1{ FL Fs Fs:0}



static void Test_Ul_S_BFu0s()
{
  {
    init_simple_test("Ul_S_BFu0s");
    static STRUCT_IF_C Ul_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_S_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_S_BFu0s, Ul_S_BFu0s)
//============================================================================


struct  Ul_Uc_BFu0c  {
  __tsu64 v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Ul_Uc_BFu0c) C1{ FL Fc Fc:0}



static void Test_Ul_Uc_BFu0c()
{
  {
    init_simple_test("Ul_Uc_BFu0c");
    static STRUCT_IF_C Ul_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Uc_BFu0c, Ul_Uc_BFu0c)
//============================================================================


struct  Ul_Uc_BFu0i  {
  __tsu64 v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Ul_Uc_BFu0i) C1{ FL Fc Fi:0}



static void Test_Ul_Uc_BFu0i()
{
  {
    init_simple_test("Ul_Uc_BFu0i");
    static STRUCT_IF_C Ul_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Uc_BFu0i, Ul_Uc_BFu0i)
//============================================================================


struct  Ul_Uc_BFu0ll  {
  __tsu64 v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Ul_Uc_BFu0ll) C1{ FL Fc FL:0}



static void Test_Ul_Uc_BFu0ll()
{
  {
    init_simple_test("Ul_Uc_BFu0ll");
    static STRUCT_IF_C Ul_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Uc_BFu0ll, Ul_Uc_BFu0ll)
//============================================================================


struct  Ul_Uc_BFu0s  {
  __tsu64 v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Ul_Uc_BFu0s) C1{ FL Fc Fs:0}



static void Test_Ul_Uc_BFu0s()
{
  {
    init_simple_test("Ul_Uc_BFu0s");
    static STRUCT_IF_C Ul_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Uc_BFu0s, Ul_Uc_BFu0s)
//============================================================================


struct  Ul_Ui_BFu0c  {
  __tsu64 v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Ul_Ui_BFu0c) C1{ FL Fi Fc:0}



static void Test_Ul_Ui_BFu0c()
{
  {
    init_simple_test("Ul_Ui_BFu0c");
    static STRUCT_IF_C Ul_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ui_BFu0c, Ul_Ui_BFu0c)
//============================================================================


struct  Ul_Ui_BFu0i  {
  __tsu64 v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Ul_Ui_BFu0i) C1{ FL Fi Fi:0}



static void Test_Ul_Ui_BFu0i()
{
  {
    init_simple_test("Ul_Ui_BFu0i");
    static STRUCT_IF_C Ul_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ui_BFu0i, Ul_Ui_BFu0i)
//============================================================================


struct  Ul_Ui_BFu0ll  {
  __tsu64 v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Ul_Ui_BFu0ll) C1{ FL Fi FL:0}



static void Test_Ul_Ui_BFu0ll()
{
  {
    init_simple_test("Ul_Ui_BFu0ll");
    static STRUCT_IF_C Ul_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ui_BFu0ll, Ul_Ui_BFu0ll)
//============================================================================


struct  Ul_Ui_BFu0s  {
  __tsu64 v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Ul_Ui_BFu0s) C1{ FL Fi Fs:0}



static void Test_Ul_Ui_BFu0s()
{
  {
    init_simple_test("Ul_Ui_BFu0s");
    static STRUCT_IF_C Ul_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ui_BFu0s, Ul_Ui_BFu0s)
//============================================================================


struct  Ul_Ul_BFu0c  {
  __tsu64 v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Ul_Ul_BFu0c) C1{ FL[2] Fc:0}



static void Test_Ul_Ul_BFu0c()
{
  {
    init_simple_test("Ul_Ul_BFu0c");
    static STRUCT_IF_C Ul_Ul_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ul_BFu0c, Ul_Ul_BFu0c)
//============================================================================


struct  Ul_Ul_BFu0i  {
  __tsu64 v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Ul_Ul_BFu0i) C1{ FL[2] Fi:0}



static void Test_Ul_Ul_BFu0i()
{
  {
    init_simple_test("Ul_Ul_BFu0i");
    static STRUCT_IF_C Ul_Ul_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ul_BFu0i, Ul_Ul_BFu0i)
//============================================================================


struct  Ul_Ul_BFu0ll  {
  __tsu64 v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Ul_Ul_BFu0ll) C1{ FL[2] FL:0}



static void Test_Ul_Ul_BFu0ll()
{
  {
    init_simple_test("Ul_Ul_BFu0ll");
    static STRUCT_IF_C Ul_Ul_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ul_BFu0ll, Ul_Ul_BFu0ll)
//============================================================================


struct  Ul_Ul_BFu0s  {
  __tsu64 v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Ul_Ul_BFu0s) C1{ FL[2] Fs:0}



static void Test_Ul_Ul_BFu0s()
{
  {
    init_simple_test("Ul_Ul_BFu0s");
    static STRUCT_IF_C Ul_Ul_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(Ul_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Ul_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Ul_BFu0s, Ul_Ul_BFu0s)
//============================================================================


struct  Ul_Us_BFu0c  {
  __tsu64 v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Ul_Us_BFu0c) C1{ FL Fs Fc:0}



static void Test_Ul_Us_BFu0c()
{
  {
    init_simple_test("Ul_Us_BFu0c");
    static STRUCT_IF_C Ul_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Us_BFu0c, Ul_Us_BFu0c)
//============================================================================


struct  Ul_Us_BFu0i  {
  __tsu64 v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Ul_Us_BFu0i) C1{ FL Fs Fi:0}



static void Test_Ul_Us_BFu0i()
{
  {
    init_simple_test("Ul_Us_BFu0i");
    static STRUCT_IF_C Ul_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Us_BFu0i, Ul_Us_BFu0i)
//============================================================================


struct  Ul_Us_BFu0ll  {
  __tsu64 v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Ul_Us_BFu0ll) C1{ FL Fs FL:0}



static void Test_Ul_Us_BFu0ll()
{
  {
    init_simple_test("Ul_Us_BFu0ll");
    static STRUCT_IF_C Ul_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Us_BFu0ll, Ul_Us_BFu0ll)
//============================================================================


struct  Ul_Us_BFu0s  {
  __tsu64 v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Ul_Us_BFu0s) C1{ FL Fs Fs:0}



static void Test_Ul_Us_BFu0s()
{
  {
    init_simple_test("Ul_Us_BFu0s");
    static STRUCT_IF_C Ul_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Us_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Us_BFu0s, Ul_Us_BFu0s)
//============================================================================


struct  Ul_Vp_BFu0c  {
  __tsu64 v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Ul_Vp_BFu0c) C1{ FL Fp Fc:0}



static void Test_Ul_Vp_BFu0c()
{
  {
    init_simple_test("Ul_Vp_BFu0c");
    static STRUCT_IF_C Ul_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0c.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Vp_BFu0c, Ul_Vp_BFu0c)
//============================================================================


struct  Ul_Vp_BFu0i  {
  __tsu64 v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Ul_Vp_BFu0i) C1{ FL Fp Fi:0}



static void Test_Ul_Vp_BFu0i()
{
  {
    init_simple_test("Ul_Vp_BFu0i");
    static STRUCT_IF_C Ul_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0i.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Vp_BFu0i, Ul_Vp_BFu0i)
//============================================================================


struct  Ul_Vp_BFu0ll  {
  __tsu64 v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Ul_Vp_BFu0ll) C1{ FL Fp FL:0}



static void Test_Ul_Vp_BFu0ll()
{
  {
    init_simple_test("Ul_Vp_BFu0ll");
    static STRUCT_IF_C Ul_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Vp_BFu0ll, Ul_Vp_BFu0ll)
//============================================================================


struct  Ul_Vp_BFu0s  {
  __tsu64 v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Ul_Vp_BFu0s) C1{ FL Fp Fs:0}



static void Test_Ul_Vp_BFu0s()
{
  {
    init_simple_test("Ul_Vp_BFu0s");
    static STRUCT_IF_C Ul_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ul_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ul_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Ul_Vp_BFu0s.v1");
    check_field_offset(lv, v2, 8, "Ul_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ul_Vp_BFu0s, Ul_Vp_BFu0s)
//============================================================================


struct  Us_BFu0c  {
  unsigned short v1;
  unsigned char  :0;
};
//SIG(1 Us_BFu0c) C1{ Fs Fc:0}



static void Test_Us_BFu0c()
{
  {
    init_simple_test("Us_BFu0c");
    static STRUCT_IF_C Us_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c, Us_BFu0c)
//============================================================================


struct  Us_BFu0c_BFu0c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0c_BFu0c) C1{ Fs Fc:0 Fc:0}



static void Test_Us_BFu0c_BFu0c()
{
  {
    init_simple_test("Us_BFu0c_BFu0c");
    static STRUCT_IF_C Us_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu0c, Us_BFu0c_BFu0c)
//============================================================================


struct  Us_BFu0c_BFu0i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0c_BFu0i) C1{ Fs Fc:0 Fi:0}



static void Test_Us_BFu0c_BFu0i()
{
  {
    init_simple_test("Us_BFu0c_BFu0i");
    static STRUCT_IF_C Us_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu0i, Us_BFu0c_BFu0i)
//============================================================================


struct  Us_BFu0c_BFu0ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0c_BFu0ll) C1{ Fs Fc:0 FL:0}



static void Test_Us_BFu0c_BFu0ll()
{
  {
    init_simple_test("Us_BFu0c_BFu0ll");
    static STRUCT_IF_C Us_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu0ll, Us_BFu0c_BFu0ll)
//============================================================================


struct  Us_BFu0c_BFu0s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0c_BFu0s) C1{ Fs Fc:0 Fs:0}



static void Test_Us_BFu0c_BFu0s()
{
  {
    init_simple_test("Us_BFu0c_BFu0s");
    static STRUCT_IF_C Us_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu0s, Us_BFu0c_BFu0s)
//============================================================================


struct  Us_BFu0c_BFu15i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0c_BFu15i) C1{ Fs Fc:0 Fi:15}



static void Test_Us_BFu0c_BFu15i()
{
  {
    init_simple_test("Us_BFu0c_BFu15i");
    static STRUCT_IF_C Us_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu15i, Us_BFu0c_BFu15i)
//============================================================================


struct  Us_BFu0c_BFu15ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0c_BFu15ll) C1{ Fs Fc:0 FL:15}



static void Test_Us_BFu0c_BFu15ll()
{
  {
    init_simple_test("Us_BFu0c_BFu15ll");
    static STRUCT_IF_C Us_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu15ll, Us_BFu0c_BFu15ll)
//============================================================================


struct  Us_BFu0c_BFu15s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0c_BFu15s) C1{ Fs Fc:0 Fs:15}



static void Test_Us_BFu0c_BFu15s()
{
  {
    init_simple_test("Us_BFu0c_BFu15s");
    static STRUCT_IF_C Us_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu15s, Us_BFu0c_BFu15s)
//============================================================================


struct  Us_BFu0c_BFu16i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0c_BFu16i) C1{ Fs Fc:0 Fi:16}



static void Test_Us_BFu0c_BFu16i()
{
  {
    init_simple_test("Us_BFu0c_BFu16i");
    static STRUCT_IF_C Us_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu16i, Us_BFu0c_BFu16i)
//============================================================================


struct  Us_BFu0c_BFu16ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0c_BFu16ll) C1{ Fs Fc:0 FL:16}



static void Test_Us_BFu0c_BFu16ll()
{
  {
    init_simple_test("Us_BFu0c_BFu16ll");
    static STRUCT_IF_C Us_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu16ll, Us_BFu0c_BFu16ll)
//============================================================================


struct  Us_BFu0c_BFu16s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0c_BFu16s) C1{ Fs Fc:0 Fs:16}



static void Test_Us_BFu0c_BFu16s()
{
  {
    init_simple_test("Us_BFu0c_BFu16s");
    static STRUCT_IF_C Us_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu16s, Us_BFu0c_BFu16s)
//============================================================================


struct  Us_BFu0c_BFu17i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0c_BFu17i) C1{ Fs Fc:0 Fi:17}



static void Test_Us_BFu0c_BFu17i()
{
  {
    init_simple_test("Us_BFu0c_BFu17i");
    static STRUCT_IF_C Us_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu17i, Us_BFu0c_BFu17i)
//============================================================================


struct  Us_BFu0c_BFu17ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0c_BFu17ll) C1{ Fs Fc:0 FL:17}



static void Test_Us_BFu0c_BFu17ll()
{
  {
    init_simple_test("Us_BFu0c_BFu17ll");
    static STRUCT_IF_C Us_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu17ll, Us_BFu0c_BFu17ll)
//============================================================================


struct  Us_BFu0c_BFu1c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0c_BFu1c) C1{ Fs Fc:0 Fc:1}



static void Test_Us_BFu0c_BFu1c()
{
  {
    init_simple_test("Us_BFu0c_BFu1c");
    static STRUCT_IF_C Us_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu1c, Us_BFu0c_BFu1c)
//============================================================================


struct  Us_BFu0c_BFu1i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0c_BFu1i) C1{ Fs Fc:0 Fi:1}



static void Test_Us_BFu0c_BFu1i()
{
  {
    init_simple_test("Us_BFu0c_BFu1i");
    static STRUCT_IF_C Us_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu1i, Us_BFu0c_BFu1i)
//============================================================================


struct  Us_BFu0c_BFu1ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0c_BFu1ll) C1{ Fs Fc:0 FL:1}



static void Test_Us_BFu0c_BFu1ll()
{
  {
    init_simple_test("Us_BFu0c_BFu1ll");
    static STRUCT_IF_C Us_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu1ll, Us_BFu0c_BFu1ll)
//============================================================================


struct  Us_BFu0c_BFu1s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0c_BFu1s) C1{ Fs Fc:0 Fs:1}



static void Test_Us_BFu0c_BFu1s()
{
  {
    init_simple_test("Us_BFu0c_BFu1s");
    static STRUCT_IF_C Us_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu1s, Us_BFu0c_BFu1s)
//============================================================================


struct  Us_BFu0c_BFu31i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0c_BFu31i) C1{ Fs Fc:0 Fi:31}



static void Test_Us_BFu0c_BFu31i()
{
  {
    init_simple_test("Us_BFu0c_BFu31i");
    static STRUCT_IF_C Us_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu31i, Us_BFu0c_BFu31i)
//============================================================================


struct  Us_BFu0c_BFu31ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0c_BFu31ll) C1{ Fs Fc:0 FL:31}



static void Test_Us_BFu0c_BFu31ll()
{
  {
    init_simple_test("Us_BFu0c_BFu31ll");
    static STRUCT_IF_C Us_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu31ll, Us_BFu0c_BFu31ll)
//============================================================================


struct  Us_BFu0c_BFu32i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0c_BFu32i) C1{ Fs Fc:0 Fi:32}



static void Test_Us_BFu0c_BFu32i()
{
  {
    init_simple_test("Us_BFu0c_BFu32i");
    static STRUCT_IF_C Us_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu32i, Us_BFu0c_BFu32i)
//============================================================================


struct  Us_BFu0c_BFu32ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0c_BFu32ll) C1{ Fs Fc:0 FL:32}



static void Test_Us_BFu0c_BFu32ll()
{
  {
    init_simple_test("Us_BFu0c_BFu32ll");
    static STRUCT_IF_C Us_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu32ll, Us_BFu0c_BFu32ll)
//============================================================================


struct  Us_BFu0c_BFu33  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0c_BFu33) C1{ Fs Fc:0 FL:33}



static void Test_Us_BFu0c_BFu33()
{
  {
    init_simple_test("Us_BFu0c_BFu33");
    static STRUCT_IF_C Us_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu33, Us_BFu0c_BFu33)
//============================================================================


struct  Us_BFu0c_BFu7c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0c_BFu7c) C1{ Fs Fc:0 Fc:7}



static void Test_Us_BFu0c_BFu7c()
{
  {
    init_simple_test("Us_BFu0c_BFu7c");
    static STRUCT_IF_C Us_BFu0c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu7c, Us_BFu0c_BFu7c)
//============================================================================


struct  Us_BFu0c_BFu7i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0c_BFu7i) C1{ Fs Fc:0 Fi:7}



static void Test_Us_BFu0c_BFu7i()
{
  {
    init_simple_test("Us_BFu0c_BFu7i");
    static STRUCT_IF_C Us_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu7i, Us_BFu0c_BFu7i)
//============================================================================


struct  Us_BFu0c_BFu7ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0c_BFu7ll) C1{ Fs Fc:0 FL:7}



static void Test_Us_BFu0c_BFu7ll()
{
  {
    init_simple_test("Us_BFu0c_BFu7ll");
    static STRUCT_IF_C Us_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu7ll, Us_BFu0c_BFu7ll)
//============================================================================


struct  Us_BFu0c_BFu7s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0c_BFu7s) C1{ Fs Fc:0 Fs:7}



static void Test_Us_BFu0c_BFu7s()
{
  {
    init_simple_test("Us_BFu0c_BFu7s");
    static STRUCT_IF_C Us_BFu0c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu7s, Us_BFu0c_BFu7s)
//============================================================================


struct  Us_BFu0c_BFu8c  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0c_BFu8c) C1{ Fs Fc:0 Fc:8}



static void Test_Us_BFu0c_BFu8c()
{
  {
    init_simple_test("Us_BFu0c_BFu8c");
    static STRUCT_IF_C Us_BFu0c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu8c, Us_BFu0c_BFu8c)
//============================================================================


struct  Us_BFu0c_BFu8i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0c_BFu8i) C1{ Fs Fc:0 Fi:8}



static void Test_Us_BFu0c_BFu8i()
{
  {
    init_simple_test("Us_BFu0c_BFu8i");
    static STRUCT_IF_C Us_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu8i, Us_BFu0c_BFu8i)
//============================================================================


struct  Us_BFu0c_BFu8ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0c_BFu8ll) C1{ Fs Fc:0 FL:8}



static void Test_Us_BFu0c_BFu8ll()
{
  {
    init_simple_test("Us_BFu0c_BFu8ll");
    static STRUCT_IF_C Us_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu8ll, Us_BFu0c_BFu8ll)
//============================================================================


struct  Us_BFu0c_BFu8s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0c_BFu8s) C1{ Fs Fc:0 Fs:8}



static void Test_Us_BFu0c_BFu8s()
{
  {
    init_simple_test("Us_BFu0c_BFu8s");
    static STRUCT_IF_C Us_BFu0c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu8s, Us_BFu0c_BFu8s)
//============================================================================


struct  Us_BFu0c_BFu9i  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0c_BFu9i) C1{ Fs Fc:0 Fi:9}



static void Test_Us_BFu0c_BFu9i()
{
  {
    init_simple_test("Us_BFu0c_BFu9i");
    static STRUCT_IF_C Us_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu9i, Us_BFu0c_BFu9i)
//============================================================================


struct  Us_BFu0c_BFu9ll  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0c_BFu9ll) C1{ Fs Fc:0 FL:9}



static void Test_Us_BFu0c_BFu9ll()
{
  {
    init_simple_test("Us_BFu0c_BFu9ll");
    static STRUCT_IF_C Us_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu9ll, Us_BFu0c_BFu9ll)
//============================================================================


struct  Us_BFu0c_BFu9s  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0c_BFu9s) C1{ Fs Fc:0 Fs:9}



static void Test_Us_BFu0c_BFu9s()
{
  {
    init_simple_test("Us_BFu0c_BFu9s");
    static STRUCT_IF_C Us_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_BFu9s, Us_BFu0c_BFu9s)
//============================================================================


struct  Us_BFu0c_C  {
  unsigned short v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Us_BFu0c_C) C1{ Fs Fc:0 Fc}



static void Test_Us_BFu0c_C()
{
  {
    init_simple_test("Us_BFu0c_C");
    static STRUCT_IF_C Us_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_C.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_C, Us_BFu0c_C)
//============================================================================


struct  Us_BFu0c_D  {
  unsigned short v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Us_BFu0c_D) C1{ Fs Fc:0 FL}



static void Test_Us_BFu0c_D()
{
  {
    init_simple_test("Us_BFu0c_D");
    static STRUCT_IF_C Us_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_D, Us_BFu0c_D)
//============================================================================


struct  Us_BFu0c_F  {
  unsigned short v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Us_BFu0c_F) C1{ Fs Fc:0 Fi}



static void Test_Us_BFu0c_F()
{
  {
    init_simple_test("Us_BFu0c_F");
    static STRUCT_IF_C Us_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_F, Us_BFu0c_F)
//============================================================================


struct  Us_BFu0c_I  {
  unsigned short v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Us_BFu0c_I) C1{ Fs Fc:0 Fi}



static void Test_Us_BFu0c_I()
{
  {
    init_simple_test("Us_BFu0c_I");
    static STRUCT_IF_C Us_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_I, Us_BFu0c_I)
//============================================================================


struct  Us_BFu0c_Ip  {
  unsigned short v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Us_BFu0c_Ip) C1{ Fs Fc:0 Fp}



static void Test_Us_BFu0c_Ip()
{
  {
    init_simple_test("Us_BFu0c_Ip");
    static STRUCT_IF_C Us_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_Ip, Us_BFu0c_Ip)
//============================================================================


struct  Us_BFu0c_L  {
  unsigned short v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0c_L) C1{ Fs Fc:0 FL}



static void Test_Us_BFu0c_L()
{
  {
    init_simple_test("Us_BFu0c_L");
    static STRUCT_IF_C Us_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_L, Us_BFu0c_L)
//============================================================================


struct  Us_BFu0c_S  {
  unsigned short v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Us_BFu0c_S) C1{ Fs Fc:0 Fs}



static void Test_Us_BFu0c_S()
{
  {
    init_simple_test("Us_BFu0c_S");
    static STRUCT_IF_C Us_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_S, Us_BFu0c_S)
//============================================================================


struct  Us_BFu0c_Uc  {
  unsigned short v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0c_Uc) C1{ Fs Fc:0 Fc}



static void Test_Us_BFu0c_Uc()
{
  {
    init_simple_test("Us_BFu0c_Uc");
    static STRUCT_IF_C Us_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_Uc, Us_BFu0c_Uc)
//============================================================================


struct  Us_BFu0c_Ui  {
  unsigned short v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0c_Ui) C1{ Fs Fc:0 Fi}



static void Test_Us_BFu0c_Ui()
{
  {
    init_simple_test("Us_BFu0c_Ui");
    static STRUCT_IF_C Us_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_Ui, Us_BFu0c_Ui)
//============================================================================


struct  Us_BFu0c_Ul  {
  unsigned short v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0c_Ul) C1{ Fs Fc:0 FL}



static void Test_Us_BFu0c_Ul()
{
  {
    init_simple_test("Us_BFu0c_Ul");
    static STRUCT_IF_C Us_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_Ul, Us_BFu0c_Ul)
//============================================================================


struct  Us_BFu0c_Us  {
  unsigned short v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0c_Us) C1{ Fs Fc:0 Fs}



static void Test_Us_BFu0c_Us()
{
  {
    init_simple_test("Us_BFu0c_Us");
    static STRUCT_IF_C Us_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_Us, Us_BFu0c_Us)
//============================================================================


struct  Us_BFu0c_Vp  {
  unsigned short v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Us_BFu0c_Vp) C1{ Fs Fc:0 Fp}



static void Test_Us_BFu0c_Vp()
{
  {
    init_simple_test("Us_BFu0c_Vp");
    static STRUCT_IF_C Us_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0c_Vp, Us_BFu0c_Vp)
//============================================================================


struct  Us_BFu0i  {
  unsigned short v1;
  unsigned int  :0;
};
//SIG(1 Us_BFu0i) C1{ Fs Fi:0}



static void Test_Us_BFu0i()
{
  {
    init_simple_test("Us_BFu0i");
    static STRUCT_IF_C Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i, Us_BFu0i)
//============================================================================


struct  Us_BFu0i_BFu0c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0i_BFu0c) C1{ Fs Fi:0 Fc:0}



static void Test_Us_BFu0i_BFu0c()
{
  {
    init_simple_test("Us_BFu0i_BFu0c");
    static STRUCT_IF_C Us_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu0c, Us_BFu0i_BFu0c)
//============================================================================


struct  Us_BFu0i_BFu0i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0i_BFu0i) C1{ Fs Fi:0 Fi:0}



static void Test_Us_BFu0i_BFu0i()
{
  {
    init_simple_test("Us_BFu0i_BFu0i");
    static STRUCT_IF_C Us_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu0i, Us_BFu0i_BFu0i)
//============================================================================


struct  Us_BFu0i_BFu0ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0i_BFu0ll) C1{ Fs Fi:0 FL:0}



static void Test_Us_BFu0i_BFu0ll()
{
  {
    init_simple_test("Us_BFu0i_BFu0ll");
    static STRUCT_IF_C Us_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu0ll, Us_BFu0i_BFu0ll)
//============================================================================


struct  Us_BFu0i_BFu0s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0i_BFu0s) C1{ Fs Fi:0 Fs:0}



static void Test_Us_BFu0i_BFu0s()
{
  {
    init_simple_test("Us_BFu0i_BFu0s");
    static STRUCT_IF_C Us_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu0s, Us_BFu0i_BFu0s)
//============================================================================


struct  Us_BFu0i_BFu15i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0i_BFu15i) C1{ Fs Fi:0 Fi:15}



static void Test_Us_BFu0i_BFu15i()
{
  {
    init_simple_test("Us_BFu0i_BFu15i");
    static STRUCT_IF_C Us_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Us_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Us_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu15i, Us_BFu0i_BFu15i)
//============================================================================


struct  Us_BFu0i_BFu15ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0i_BFu15ll) C1{ Fs Fi:0 FL:15}



static void Test_Us_BFu0i_BFu15ll()
{
  {
    init_simple_test("Us_BFu0i_BFu15ll");
    static STRUCT_IF_C Us_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Us_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Us_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu15ll, Us_BFu0i_BFu15ll)
//============================================================================


struct  Us_BFu0i_BFu15s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0i_BFu15s) C1{ Fs Fi:0 Fs:15}



static void Test_Us_BFu0i_BFu15s()
{
  {
    init_simple_test("Us_BFu0i_BFu15s");
    static STRUCT_IF_C Us_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "Us_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "Us_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu15s, Us_BFu0i_BFu15s)
//============================================================================


struct  Us_BFu0i_BFu16i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0i_BFu16i) C1{ Fs Fi:0 Fi:16}



static void Test_Us_BFu0i_BFu16i()
{
  {
    init_simple_test("Us_BFu0i_BFu16i");
    static STRUCT_IF_C Us_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Us_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Us_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu16i, Us_BFu0i_BFu16i)
//============================================================================


struct  Us_BFu0i_BFu16ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0i_BFu16ll) C1{ Fs Fi:0 FL:16}



static void Test_Us_BFu0i_BFu16ll()
{
  {
    init_simple_test("Us_BFu0i_BFu16ll");
    static STRUCT_IF_C Us_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Us_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Us_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu16ll, Us_BFu0i_BFu16ll)
//============================================================================


struct  Us_BFu0i_BFu16s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0i_BFu16s) C1{ Fs Fi:0 Fs:16}



static void Test_Us_BFu0i_BFu16s()
{
  {
    init_simple_test("Us_BFu0i_BFu16s");
    static STRUCT_IF_C Us_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "Us_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "Us_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu16s, Us_BFu0i_BFu16s)
//============================================================================


struct  Us_BFu0i_BFu17i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0i_BFu17i) C1{ Fs Fi:0 Fi:17}



static void Test_Us_BFu0i_BFu17i()
{
  {
    init_simple_test("Us_BFu0i_BFu17i");
    static STRUCT_IF_C Us_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu17i, Us_BFu0i_BFu17i)
//============================================================================


struct  Us_BFu0i_BFu17ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0i_BFu17ll) C1{ Fs Fi:0 FL:17}



static void Test_Us_BFu0i_BFu17ll()
{
  {
    init_simple_test("Us_BFu0i_BFu17ll");
    static STRUCT_IF_C Us_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu17ll, Us_BFu0i_BFu17ll)
//============================================================================


struct  Us_BFu0i_BFu1c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0i_BFu1c) C1{ Fs Fi:0 Fc:1}



static void Test_Us_BFu0i_BFu1c()
{
  {
    init_simple_test("Us_BFu0i_BFu1c");
    static STRUCT_IF_C Us_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu1c, Us_BFu0i_BFu1c)
//============================================================================


struct  Us_BFu0i_BFu1i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0i_BFu1i) C1{ Fs Fi:0 Fi:1}



static void Test_Us_BFu0i_BFu1i()
{
  {
    init_simple_test("Us_BFu0i_BFu1i");
    static STRUCT_IF_C Us_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu1i, Us_BFu0i_BFu1i)
//============================================================================


struct  Us_BFu0i_BFu1ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0i_BFu1ll) C1{ Fs Fi:0 FL:1}



static void Test_Us_BFu0i_BFu1ll()
{
  {
    init_simple_test("Us_BFu0i_BFu1ll");
    static STRUCT_IF_C Us_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu1ll, Us_BFu0i_BFu1ll)
//============================================================================


struct  Us_BFu0i_BFu1s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0i_BFu1s) C1{ Fs Fi:0 Fs:1}



static void Test_Us_BFu0i_BFu1s()
{
  {
    init_simple_test("Us_BFu0i_BFu1s");
    static STRUCT_IF_C Us_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "Us_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu1s, Us_BFu0i_BFu1s)
//============================================================================


struct  Us_BFu0i_BFu31i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0i_BFu31i) C1{ Fs Fi:0 Fi:31}



static void Test_Us_BFu0i_BFu31i()
{
  {
    init_simple_test("Us_BFu0i_BFu31i");
    static STRUCT_IF_C Us_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu31i, Us_BFu0i_BFu31i)
//============================================================================


struct  Us_BFu0i_BFu31ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0i_BFu31ll) C1{ Fs Fi:0 FL:31}



static void Test_Us_BFu0i_BFu31ll()
{
  {
    init_simple_test("Us_BFu0i_BFu31ll");
    static STRUCT_IF_C Us_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu31ll, Us_BFu0i_BFu31ll)
//============================================================================


struct  Us_BFu0i_BFu32i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0i_BFu32i) C1{ Fs Fi:0 Fi:32}



static void Test_Us_BFu0i_BFu32i()
{
  {
    init_simple_test("Us_BFu0i_BFu32i");
    static STRUCT_IF_C Us_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu32i, Us_BFu0i_BFu32i)
//============================================================================


struct  Us_BFu0i_BFu32ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0i_BFu32ll) C1{ Fs Fi:0 FL:32}



static void Test_Us_BFu0i_BFu32ll()
{
  {
    init_simple_test("Us_BFu0i_BFu32ll");
    static STRUCT_IF_C Us_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu32ll, Us_BFu0i_BFu32ll)
//============================================================================


struct  Us_BFu0i_BFu33  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0i_BFu33) C1{ Fs Fi:0 FL:33}



static void Test_Us_BFu0i_BFu33()
{
  {
    init_simple_test("Us_BFu0i_BFu33");
    static STRUCT_IF_C Us_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Us_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Us_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu33, Us_BFu0i_BFu33)
//============================================================================


struct  Us_BFu0i_BFu7c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0i_BFu7c) C1{ Fs Fi:0 Fc:7}



static void Test_Us_BFu0i_BFu7c()
{
  {
    init_simple_test("Us_BFu0i_BFu7c");
    static STRUCT_IF_C Us_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu7c, Us_BFu0i_BFu7c)
//============================================================================


struct  Us_BFu0i_BFu7i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0i_BFu7i) C1{ Fs Fi:0 Fi:7}



static void Test_Us_BFu0i_BFu7i()
{
  {
    init_simple_test("Us_BFu0i_BFu7i");
    static STRUCT_IF_C Us_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu7i, Us_BFu0i_BFu7i)
//============================================================================


struct  Us_BFu0i_BFu7ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0i_BFu7ll) C1{ Fs Fi:0 FL:7}



static void Test_Us_BFu0i_BFu7ll()
{
  {
    init_simple_test("Us_BFu0i_BFu7ll");
    static STRUCT_IF_C Us_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu7ll, Us_BFu0i_BFu7ll)
//============================================================================


struct  Us_BFu0i_BFu7s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0i_BFu7s) C1{ Fs Fi:0 Fs:7}



static void Test_Us_BFu0i_BFu7s()
{
  {
    init_simple_test("Us_BFu0i_BFu7s");
    static STRUCT_IF_C Us_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "Us_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "Us_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu7s, Us_BFu0i_BFu7s)
//============================================================================


struct  Us_BFu0i_BFu8c  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0i_BFu8c) C1{ Fs Fi:0 Fc:8}



static void Test_Us_BFu0i_BFu8c()
{
  {
    init_simple_test("Us_BFu0i_BFu8c");
    static STRUCT_IF_C Us_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu8c, Us_BFu0i_BFu8c)
//============================================================================


struct  Us_BFu0i_BFu8i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0i_BFu8i) C1{ Fs Fi:0 Fi:8}



static void Test_Us_BFu0i_BFu8i()
{
  {
    init_simple_test("Us_BFu0i_BFu8i");
    static STRUCT_IF_C Us_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu8i, Us_BFu0i_BFu8i)
//============================================================================


struct  Us_BFu0i_BFu8ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0i_BFu8ll) C1{ Fs Fi:0 FL:8}



static void Test_Us_BFu0i_BFu8ll()
{
  {
    init_simple_test("Us_BFu0i_BFu8ll");
    static STRUCT_IF_C Us_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu8ll, Us_BFu0i_BFu8ll)
//============================================================================


struct  Us_BFu0i_BFu8s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0i_BFu8s) C1{ Fs Fi:0 Fs:8}



static void Test_Us_BFu0i_BFu8s()
{
  {
    init_simple_test("Us_BFu0i_BFu8s");
    static STRUCT_IF_C Us_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "Us_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "Us_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu8s, Us_BFu0i_BFu8s)
//============================================================================


struct  Us_BFu0i_BFu9i  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0i_BFu9i) C1{ Fs Fi:0 Fi:9}



static void Test_Us_BFu0i_BFu9i()
{
  {
    init_simple_test("Us_BFu0i_BFu9i");
    static STRUCT_IF_C Us_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Us_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Us_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu9i, Us_BFu0i_BFu9i)
//============================================================================


struct  Us_BFu0i_BFu9ll  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0i_BFu9ll) C1{ Fs Fi:0 FL:9}



static void Test_Us_BFu0i_BFu9ll()
{
  {
    init_simple_test("Us_BFu0i_BFu9ll");
    static STRUCT_IF_C Us_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Us_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Us_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu9ll, Us_BFu0i_BFu9ll)
//============================================================================


struct  Us_BFu0i_BFu9s  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0i_BFu9s) C1{ Fs Fi:0 Fs:9}



static void Test_Us_BFu0i_BFu9s()
{
  {
    init_simple_test("Us_BFu0i_BFu9s");
    static STRUCT_IF_C Us_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "Us_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "Us_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_BFu9s, Us_BFu0i_BFu9s)
//============================================================================


struct  Us_BFu0i_C  {
  unsigned short v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Us_BFu0i_C) C1{ Fs Fi:0 Fc}



static void Test_Us_BFu0i_C()
{
  {
    init_simple_test("Us_BFu0i_C");
    static STRUCT_IF_C Us_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_C, Us_BFu0i_C)
//============================================================================


struct  Us_BFu0i_D  {
  unsigned short v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Us_BFu0i_D) C1{ Fs Fi:0 FL}



static void Test_Us_BFu0i_D()
{
  {
    init_simple_test("Us_BFu0i_D");
    static STRUCT_IF_C Us_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_D, Us_BFu0i_D)
//============================================================================


struct  Us_BFu0i_F  {
  unsigned short v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Us_BFu0i_F) C1{ Fs Fi:0 Fi}



static void Test_Us_BFu0i_F()
{
  {
    init_simple_test("Us_BFu0i_F");
    static STRUCT_IF_C Us_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_F, Us_BFu0i_F)
//============================================================================


struct  Us_BFu0i_I  {
  unsigned short v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Us_BFu0i_I) C1{ Fs Fi:0 Fi}



static void Test_Us_BFu0i_I()
{
  {
    init_simple_test("Us_BFu0i_I");
    static STRUCT_IF_C Us_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_I, Us_BFu0i_I)
//============================================================================


struct  Us_BFu0i_Ip  {
  unsigned short v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Us_BFu0i_Ip) C1{ Fs Fi:0 Fp}



static void Test_Us_BFu0i_Ip()
{
  {
    init_simple_test("Us_BFu0i_Ip");
    static STRUCT_IF_C Us_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_Ip, Us_BFu0i_Ip)
//============================================================================


struct  Us_BFu0i_L  {
  unsigned short v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0i_L) C1{ Fs Fi:0 FL}



static void Test_Us_BFu0i_L()
{
  {
    init_simple_test("Us_BFu0i_L");
    static STRUCT_IF_C Us_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_L, Us_BFu0i_L)
//============================================================================


struct  Us_BFu0i_S  {
  unsigned short v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Us_BFu0i_S) C1{ Fs Fi:0 Fs}



static void Test_Us_BFu0i_S()
{
  {
    init_simple_test("Us_BFu0i_S");
    static STRUCT_IF_C Us_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_S, Us_BFu0i_S)
//============================================================================


struct  Us_BFu0i_Uc  {
  unsigned short v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0i_Uc) C1{ Fs Fi:0 Fc}



static void Test_Us_BFu0i_Uc()
{
  {
    init_simple_test("Us_BFu0i_Uc");
    static STRUCT_IF_C Us_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_Uc, Us_BFu0i_Uc)
//============================================================================


struct  Us_BFu0i_Ui  {
  unsigned short v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0i_Ui) C1{ Fs Fi:0 Fi}



static void Test_Us_BFu0i_Ui()
{
  {
    init_simple_test("Us_BFu0i_Ui");
    static STRUCT_IF_C Us_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_Ui, Us_BFu0i_Ui)
//============================================================================


struct  Us_BFu0i_Ul  {
  unsigned short v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0i_Ul) C1{ Fs Fi:0 FL}



static void Test_Us_BFu0i_Ul()
{
  {
    init_simple_test("Us_BFu0i_Ul");
    static STRUCT_IF_C Us_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_Ul, Us_BFu0i_Ul)
//============================================================================


struct  Us_BFu0i_Us  {
  unsigned short v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0i_Us) C1{ Fs Fi:0 Fs}



static void Test_Us_BFu0i_Us()
{
  {
    init_simple_test("Us_BFu0i_Us");
    static STRUCT_IF_C Us_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(Us_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_Us, Us_BFu0i_Us)
//============================================================================


struct  Us_BFu0i_Vp  {
  unsigned short v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Us_BFu0i_Vp) C1{ Fs Fi:0 Fp}



static void Test_Us_BFu0i_Vp()
{
  {
    init_simple_test("Us_BFu0i_Vp");
    static STRUCT_IF_C Us_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0i_Vp, Us_BFu0i_Vp)
//============================================================================


struct  Us_BFu0ll  {
  unsigned short v1;
  __tsu64  :0;
};
//SIG(1 Us_BFu0ll) C1{ Fs FL:0}



static void Test_Us_BFu0ll()
{
  {
    init_simple_test("Us_BFu0ll");
    static STRUCT_IF_C Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll, Us_BFu0ll)
//============================================================================


struct  Us_BFu0ll_BFu0c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0ll_BFu0c) C1{ Fs FL:0 Fc:0}



static void Test_Us_BFu0ll_BFu0c()
{
  {
    init_simple_test("Us_BFu0ll_BFu0c");
    static STRUCT_IF_C Us_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu0c, Us_BFu0ll_BFu0c)
//============================================================================


struct  Us_BFu0ll_BFu0i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0ll_BFu0i) C1{ Fs FL:0 Fi:0}



static void Test_Us_BFu0ll_BFu0i()
{
  {
    init_simple_test("Us_BFu0ll_BFu0i");
    static STRUCT_IF_C Us_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu0i, Us_BFu0ll_BFu0i)
//============================================================================


struct  Us_BFu0ll_BFu0ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0ll_BFu0ll) C1{ Fs FL:0 FL:0}



static void Test_Us_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu0ll");
    static STRUCT_IF_C Us_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu0ll, Us_BFu0ll_BFu0ll)
//============================================================================


struct  Us_BFu0ll_BFu0s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0ll_BFu0s) C1{ Fs FL:0 Fs:0}



static void Test_Us_BFu0ll_BFu0s()
{
  {
    init_simple_test("Us_BFu0ll_BFu0s");
    static STRUCT_IF_C Us_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu0s, Us_BFu0ll_BFu0s)
//============================================================================


struct  Us_BFu0ll_BFu15i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0ll_BFu15i) C1{ Fs FL:0 Fi:15}



static void Test_Us_BFu0ll_BFu15i()
{
  {
    init_simple_test("Us_BFu0ll_BFu15i");
    static STRUCT_IF_C Us_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Us_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Us_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu15i, Us_BFu0ll_BFu15i)
//============================================================================


struct  Us_BFu0ll_BFu15ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0ll_BFu15ll) C1{ Fs FL:0 FL:15}



static void Test_Us_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu15ll");
    static STRUCT_IF_C Us_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Us_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Us_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu15ll, Us_BFu0ll_BFu15ll)
//============================================================================


struct  Us_BFu0ll_BFu15s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0ll_BFu15s) C1{ Fs FL:0 Fs:15}



static void Test_Us_BFu0ll_BFu15s()
{
  {
    init_simple_test("Us_BFu0ll_BFu15s");
    static STRUCT_IF_C Us_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Us_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Us_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu15s, Us_BFu0ll_BFu15s)
//============================================================================


struct  Us_BFu0ll_BFu16i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0ll_BFu16i) C1{ Fs FL:0 Fi:16}



static void Test_Us_BFu0ll_BFu16i()
{
  {
    init_simple_test("Us_BFu0ll_BFu16i");
    static STRUCT_IF_C Us_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Us_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Us_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu16i, Us_BFu0ll_BFu16i)
//============================================================================


struct  Us_BFu0ll_BFu16ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0ll_BFu16ll) C1{ Fs FL:0 FL:16}



static void Test_Us_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu16ll");
    static STRUCT_IF_C Us_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Us_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Us_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu16ll, Us_BFu0ll_BFu16ll)
//============================================================================


struct  Us_BFu0ll_BFu16s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0ll_BFu16s) C1{ Fs FL:0 Fs:16}



static void Test_Us_BFu0ll_BFu16s()
{
  {
    init_simple_test("Us_BFu0ll_BFu16s");
    static STRUCT_IF_C Us_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Us_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Us_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu16s, Us_BFu0ll_BFu16s)
//============================================================================


struct  Us_BFu0ll_BFu17i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0ll_BFu17i) C1{ Fs FL:0 Fi:17}



static void Test_Us_BFu0ll_BFu17i()
{
  {
    init_simple_test("Us_BFu0ll_BFu17i");
    static STRUCT_IF_C Us_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Us_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Us_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu17i, Us_BFu0ll_BFu17i)
//============================================================================


struct  Us_BFu0ll_BFu17ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0ll_BFu17ll) C1{ Fs FL:0 FL:17}



static void Test_Us_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu17ll");
    static STRUCT_IF_C Us_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Us_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Us_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu17ll, Us_BFu0ll_BFu17ll)
//============================================================================


struct  Us_BFu0ll_BFu1c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0ll_BFu1c) C1{ Fs FL:0 Fc:1}



static void Test_Us_BFu0ll_BFu1c()
{
  {
    init_simple_test("Us_BFu0ll_BFu1c");
    static STRUCT_IF_C Us_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu1c, Us_BFu0ll_BFu1c)
//============================================================================


struct  Us_BFu0ll_BFu1i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0ll_BFu1i) C1{ Fs FL:0 Fi:1}



static void Test_Us_BFu0ll_BFu1i()
{
  {
    init_simple_test("Us_BFu0ll_BFu1i");
    static STRUCT_IF_C Us_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu1i, Us_BFu0ll_BFu1i)
//============================================================================


struct  Us_BFu0ll_BFu1ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0ll_BFu1ll) C1{ Fs FL:0 FL:1}



static void Test_Us_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu1ll");
    static STRUCT_IF_C Us_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu1ll, Us_BFu0ll_BFu1ll)
//============================================================================


struct  Us_BFu0ll_BFu1s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0ll_BFu1s) C1{ Fs FL:0 Fs:1}



static void Test_Us_BFu0ll_BFu1s()
{
  {
    init_simple_test("Us_BFu0ll_BFu1s");
    static STRUCT_IF_C Us_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Us_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu1s, Us_BFu0ll_BFu1s)
//============================================================================


struct  Us_BFu0ll_BFu31i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0ll_BFu31i) C1{ Fs FL:0 Fi:31}



static void Test_Us_BFu0ll_BFu31i()
{
  {
    init_simple_test("Us_BFu0ll_BFu31i");
    static STRUCT_IF_C Us_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Us_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Us_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu31i, Us_BFu0ll_BFu31i)
//============================================================================


struct  Us_BFu0ll_BFu31ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0ll_BFu31ll) C1{ Fs FL:0 FL:31}



static void Test_Us_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu31ll");
    static STRUCT_IF_C Us_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Us_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Us_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu31ll, Us_BFu0ll_BFu31ll)
//============================================================================


struct  Us_BFu0ll_BFu32i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0ll_BFu32i) C1{ Fs FL:0 Fi:32}



static void Test_Us_BFu0ll_BFu32i()
{
  {
    init_simple_test("Us_BFu0ll_BFu32i");
    static STRUCT_IF_C Us_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Us_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Us_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu32i, Us_BFu0ll_BFu32i)
//============================================================================


struct  Us_BFu0ll_BFu32ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0ll_BFu32ll) C1{ Fs FL:0 FL:32}



static void Test_Us_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu32ll");
    static STRUCT_IF_C Us_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Us_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Us_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu32ll, Us_BFu0ll_BFu32ll)
//============================================================================


struct  Us_BFu0ll_BFu33  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0ll_BFu33) C1{ Fs FL:0 FL:33}



static void Test_Us_BFu0ll_BFu33()
{
  {
    init_simple_test("Us_BFu0ll_BFu33");
    static STRUCT_IF_C Us_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Us_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Us_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu33, Us_BFu0ll_BFu33)
//============================================================================


struct  Us_BFu0ll_BFu7c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0ll_BFu7c) C1{ Fs FL:0 Fc:7}



static void Test_Us_BFu0ll_BFu7c()
{
  {
    init_simple_test("Us_BFu0ll_BFu7c");
    static STRUCT_IF_C Us_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu7c, Us_BFu0ll_BFu7c)
//============================================================================


struct  Us_BFu0ll_BFu7i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0ll_BFu7i) C1{ Fs FL:0 Fi:7}



static void Test_Us_BFu0ll_BFu7i()
{
  {
    init_simple_test("Us_BFu0ll_BFu7i");
    static STRUCT_IF_C Us_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu7i, Us_BFu0ll_BFu7i)
//============================================================================


struct  Us_BFu0ll_BFu7ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0ll_BFu7ll) C1{ Fs FL:0 FL:7}



static void Test_Us_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu7ll");
    static STRUCT_IF_C Us_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu7ll, Us_BFu0ll_BFu7ll)
//============================================================================


struct  Us_BFu0ll_BFu7s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0ll_BFu7s) C1{ Fs FL:0 Fs:7}



static void Test_Us_BFu0ll_BFu7s()
{
  {
    init_simple_test("Us_BFu0ll_BFu7s");
    static STRUCT_IF_C Us_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Us_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Us_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu7s, Us_BFu0ll_BFu7s)
//============================================================================


struct  Us_BFu0ll_BFu8c  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0ll_BFu8c) C1{ Fs FL:0 Fc:8}



static void Test_Us_BFu0ll_BFu8c()
{
  {
    init_simple_test("Us_BFu0ll_BFu8c");
    static STRUCT_IF_C Us_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu8c, Us_BFu0ll_BFu8c)
//============================================================================


struct  Us_BFu0ll_BFu8i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0ll_BFu8i) C1{ Fs FL:0 Fi:8}



static void Test_Us_BFu0ll_BFu8i()
{
  {
    init_simple_test("Us_BFu0ll_BFu8i");
    static STRUCT_IF_C Us_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu8i, Us_BFu0ll_BFu8i)
//============================================================================


struct  Us_BFu0ll_BFu8ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0ll_BFu8ll) C1{ Fs FL:0 FL:8}



static void Test_Us_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu8ll");
    static STRUCT_IF_C Us_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu8ll, Us_BFu0ll_BFu8ll)
//============================================================================


struct  Us_BFu0ll_BFu8s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0ll_BFu8s) C1{ Fs FL:0 Fs:8}



static void Test_Us_BFu0ll_BFu8s()
{
  {
    init_simple_test("Us_BFu0ll_BFu8s");
    static STRUCT_IF_C Us_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Us_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Us_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu8s, Us_BFu0ll_BFu8s)
//============================================================================


struct  Us_BFu0ll_BFu9i  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0ll_BFu9i) C1{ Fs FL:0 Fi:9}



static void Test_Us_BFu0ll_BFu9i()
{
  {
    init_simple_test("Us_BFu0ll_BFu9i");
    static STRUCT_IF_C Us_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Us_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Us_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu9i, Us_BFu0ll_BFu9i)
//============================================================================


struct  Us_BFu0ll_BFu9ll  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0ll_BFu9ll) C1{ Fs FL:0 FL:9}



static void Test_Us_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Us_BFu0ll_BFu9ll");
    static STRUCT_IF_C Us_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Us_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Us_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu9ll, Us_BFu0ll_BFu9ll)
//============================================================================


struct  Us_BFu0ll_BFu9s  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0ll_BFu9s) C1{ Fs FL:0 Fs:9}



static void Test_Us_BFu0ll_BFu9s()
{
  {
    init_simple_test("Us_BFu0ll_BFu9s");
    static STRUCT_IF_C Us_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Us_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Us_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_BFu9s, Us_BFu0ll_BFu9s)
//============================================================================


struct  Us_BFu0ll_C  {
  unsigned short v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Us_BFu0ll_C) C1{ Fs FL:0 Fc}



static void Test_Us_BFu0ll_C()
{
  {
    init_simple_test("Us_BFu0ll_C");
    static STRUCT_IF_C Us_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_C, Us_BFu0ll_C)
//============================================================================


struct  Us_BFu0ll_D  {
  unsigned short v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Us_BFu0ll_D) C1{ Fs FL:0 FL}



static void Test_Us_BFu0ll_D()
{
  {
    init_simple_test("Us_BFu0ll_D");
    static STRUCT_IF_C Us_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_D, Us_BFu0ll_D)
//============================================================================


struct  Us_BFu0ll_F  {
  unsigned short v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Us_BFu0ll_F) C1{ Fs FL:0 Fi}



static void Test_Us_BFu0ll_F()
{
  {
    init_simple_test("Us_BFu0ll_F");
    static STRUCT_IF_C Us_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_F, Us_BFu0ll_F)
//============================================================================


struct  Us_BFu0ll_I  {
  unsigned short v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Us_BFu0ll_I) C1{ Fs FL:0 Fi}



static void Test_Us_BFu0ll_I()
{
  {
    init_simple_test("Us_BFu0ll_I");
    static STRUCT_IF_C Us_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_I, Us_BFu0ll_I)
//============================================================================


struct  Us_BFu0ll_Ip  {
  unsigned short v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Us_BFu0ll_Ip) C1{ Fs FL:0 Fp}



static void Test_Us_BFu0ll_Ip()
{
  {
    init_simple_test("Us_BFu0ll_Ip");
    static STRUCT_IF_C Us_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_Ip, Us_BFu0ll_Ip)
//============================================================================


struct  Us_BFu0ll_L  {
  unsigned short v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0ll_L) C1{ Fs FL:0 FL}



static void Test_Us_BFu0ll_L()
{
  {
    init_simple_test("Us_BFu0ll_L");
    static STRUCT_IF_C Us_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_L, Us_BFu0ll_L)
//============================================================================


struct  Us_BFu0ll_S  {
  unsigned short v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Us_BFu0ll_S) C1{ Fs FL:0 Fs}



static void Test_Us_BFu0ll_S()
{
  {
    init_simple_test("Us_BFu0ll_S");
    static STRUCT_IF_C Us_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_S, Us_BFu0ll_S)
//============================================================================


struct  Us_BFu0ll_Uc  {
  unsigned short v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0ll_Uc) C1{ Fs FL:0 Fc}



static void Test_Us_BFu0ll_Uc()
{
  {
    init_simple_test("Us_BFu0ll_Uc");
    static STRUCT_IF_C Us_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_Uc, Us_BFu0ll_Uc)
//============================================================================


struct  Us_BFu0ll_Ui  {
  unsigned short v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0ll_Ui) C1{ Fs FL:0 Fi}



static void Test_Us_BFu0ll_Ui()
{
  {
    init_simple_test("Us_BFu0ll_Ui");
    static STRUCT_IF_C Us_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(Us_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_Ui, Us_BFu0ll_Ui)
//============================================================================


struct  Us_BFu0ll_Ul  {
  unsigned short v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0ll_Ul) C1{ Fs FL:0 FL}



static void Test_Us_BFu0ll_Ul()
{
  {
    init_simple_test("Us_BFu0ll_Ul");
    static STRUCT_IF_C Us_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_Ul, Us_BFu0ll_Ul)
//============================================================================


struct  Us_BFu0ll_Us  {
  unsigned short v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0ll_Us) C1{ Fs FL:0 Fs}



static void Test_Us_BFu0ll_Us()
{
  {
    init_simple_test("Us_BFu0ll_Us");
    static STRUCT_IF_C Us_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(Us_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_Us, Us_BFu0ll_Us)
//============================================================================


struct  Us_BFu0ll_Vp  {
  unsigned short v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Us_BFu0ll_Vp) C1{ Fs FL:0 Fp}



static void Test_Us_BFu0ll_Vp()
{
  {
    init_simple_test("Us_BFu0ll_Vp");
    static STRUCT_IF_C Us_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0ll_Vp, Us_BFu0ll_Vp)
//============================================================================


struct  Us_BFu0s  {
  unsigned short v1;
  unsigned short  :0;
};
//SIG(1 Us_BFu0s) C1{ Fs Fs:0}



static void Test_Us_BFu0s()
{
  {
    init_simple_test("Us_BFu0s");
    static STRUCT_IF_C Us_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s, Us_BFu0s)
//============================================================================


struct  Us_BFu0s_BFu0c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Us_BFu0s_BFu0c) C1{ Fs Fs:0 Fc:0}



static void Test_Us_BFu0s_BFu0c()
{
  {
    init_simple_test("Us_BFu0s_BFu0c");
    static STRUCT_IF_C Us_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu0c, Us_BFu0s_BFu0c)
//============================================================================


struct  Us_BFu0s_BFu0i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Us_BFu0s_BFu0i) C1{ Fs Fs:0 Fi:0}



static void Test_Us_BFu0s_BFu0i()
{
  {
    init_simple_test("Us_BFu0s_BFu0i");
    static STRUCT_IF_C Us_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu0i, Us_BFu0s_BFu0i)
//============================================================================


struct  Us_BFu0s_BFu0ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Us_BFu0s_BFu0ll) C1{ Fs Fs:0 FL:0}



static void Test_Us_BFu0s_BFu0ll()
{
  {
    init_simple_test("Us_BFu0s_BFu0ll");
    static STRUCT_IF_C Us_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu0ll, Us_BFu0s_BFu0ll)
//============================================================================


struct  Us_BFu0s_BFu0s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Us_BFu0s_BFu0s) C1{ Fs Fs:0 Fs:0}



static void Test_Us_BFu0s_BFu0s()
{
  {
    init_simple_test("Us_BFu0s_BFu0s");
    static STRUCT_IF_C Us_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(Us_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu0s, Us_BFu0s_BFu0s)
//============================================================================


struct  Us_BFu0s_BFu15i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Us_BFu0s_BFu15i) C1{ Fs Fs:0 Fi:15}



static void Test_Us_BFu0s_BFu15i()
{
  {
    init_simple_test("Us_BFu0s_BFu15i");
    static STRUCT_IF_C Us_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu15i, Us_BFu0s_BFu15i)
//============================================================================


struct  Us_BFu0s_BFu15ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Us_BFu0s_BFu15ll) C1{ Fs Fs:0 FL:15}



static void Test_Us_BFu0s_BFu15ll()
{
  {
    init_simple_test("Us_BFu0s_BFu15ll");
    static STRUCT_IF_C Us_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu15ll, Us_BFu0s_BFu15ll)
//============================================================================


struct  Us_BFu0s_BFu15s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Us_BFu0s_BFu15s) C1{ Fs Fs:0 Fs:15}



static void Test_Us_BFu0s_BFu15s()
{
  {
    init_simple_test("Us_BFu0s_BFu15s");
    static STRUCT_IF_C Us_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu15s, Us_BFu0s_BFu15s)
//============================================================================


struct  Us_BFu0s_BFu16i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Us_BFu0s_BFu16i) C1{ Fs Fs:0 Fi:16}



static void Test_Us_BFu0s_BFu16i()
{
  {
    init_simple_test("Us_BFu0s_BFu16i");
    static STRUCT_IF_C Us_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu16i, Us_BFu0s_BFu16i)
//============================================================================


struct  Us_BFu0s_BFu16ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Us_BFu0s_BFu16ll) C1{ Fs Fs:0 FL:16}



static void Test_Us_BFu0s_BFu16ll()
{
  {
    init_simple_test("Us_BFu0s_BFu16ll");
    static STRUCT_IF_C Us_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu16ll, Us_BFu0s_BFu16ll)
//============================================================================


struct  Us_BFu0s_BFu16s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Us_BFu0s_BFu16s) C1{ Fs Fs:0 Fs:16}



static void Test_Us_BFu0s_BFu16s()
{
  {
    init_simple_test("Us_BFu0s_BFu16s");
    static STRUCT_IF_C Us_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu16s, Us_BFu0s_BFu16s)
//============================================================================


struct  Us_BFu0s_BFu17i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Us_BFu0s_BFu17i) C1{ Fs Fs:0 Fi:17}



static void Test_Us_BFu0s_BFu17i()
{
  {
    init_simple_test("Us_BFu0s_BFu17i");
    static STRUCT_IF_C Us_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu17i, Us_BFu0s_BFu17i)
//============================================================================


struct  Us_BFu0s_BFu17ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Us_BFu0s_BFu17ll) C1{ Fs Fs:0 FL:17}



static void Test_Us_BFu0s_BFu17ll()
{
  {
    init_simple_test("Us_BFu0s_BFu17ll");
    static STRUCT_IF_C Us_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu17ll, Us_BFu0s_BFu17ll)
//============================================================================


struct  Us_BFu0s_BFu1c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Us_BFu0s_BFu1c) C1{ Fs Fs:0 Fc:1}



static void Test_Us_BFu0s_BFu1c()
{
  {
    init_simple_test("Us_BFu0s_BFu1c");
    static STRUCT_IF_C Us_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu1c, Us_BFu0s_BFu1c)
//============================================================================


struct  Us_BFu0s_BFu1i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Us_BFu0s_BFu1i) C1{ Fs Fs:0 Fi:1}



static void Test_Us_BFu0s_BFu1i()
{
  {
    init_simple_test("Us_BFu0s_BFu1i");
    static STRUCT_IF_C Us_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu1i, Us_BFu0s_BFu1i)
//============================================================================


struct  Us_BFu0s_BFu1ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Us_BFu0s_BFu1ll) C1{ Fs Fs:0 FL:1}



static void Test_Us_BFu0s_BFu1ll()
{
  {
    init_simple_test("Us_BFu0s_BFu1ll");
    static STRUCT_IF_C Us_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu1ll, Us_BFu0s_BFu1ll)
//============================================================================


struct  Us_BFu0s_BFu1s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Us_BFu0s_BFu1s) C1{ Fs Fs:0 Fs:1}



static void Test_Us_BFu0s_BFu1s()
{
  {
    init_simple_test("Us_BFu0s_BFu1s");
    static STRUCT_IF_C Us_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu1s, Us_BFu0s_BFu1s)
//============================================================================


struct  Us_BFu0s_BFu31i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Us_BFu0s_BFu31i) C1{ Fs Fs:0 Fi:31}



static void Test_Us_BFu0s_BFu31i()
{
  {
    init_simple_test("Us_BFu0s_BFu31i");
    static STRUCT_IF_C Us_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu31i, Us_BFu0s_BFu31i)
//============================================================================


struct  Us_BFu0s_BFu31ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Us_BFu0s_BFu31ll) C1{ Fs Fs:0 FL:31}



static void Test_Us_BFu0s_BFu31ll()
{
  {
    init_simple_test("Us_BFu0s_BFu31ll");
    static STRUCT_IF_C Us_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu31ll, Us_BFu0s_BFu31ll)
//============================================================================


struct  Us_BFu0s_BFu32i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Us_BFu0s_BFu32i) C1{ Fs Fs:0 Fi:32}



static void Test_Us_BFu0s_BFu32i()
{
  {
    init_simple_test("Us_BFu0s_BFu32i");
    static STRUCT_IF_C Us_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu32i, Us_BFu0s_BFu32i)
//============================================================================


struct  Us_BFu0s_BFu32ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Us_BFu0s_BFu32ll) C1{ Fs Fs:0 FL:32}



static void Test_Us_BFu0s_BFu32ll()
{
  {
    init_simple_test("Us_BFu0s_BFu32ll");
    static STRUCT_IF_C Us_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu32ll, Us_BFu0s_BFu32ll)
//============================================================================


struct  Us_BFu0s_BFu33  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Us_BFu0s_BFu33) C1{ Fs Fs:0 FL:33}



static void Test_Us_BFu0s_BFu33()
{
  {
    init_simple_test("Us_BFu0s_BFu33");
    static STRUCT_IF_C Us_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu33, Us_BFu0s_BFu33)
//============================================================================


struct  Us_BFu0s_BFu7c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Us_BFu0s_BFu7c) C1{ Fs Fs:0 Fc:7}



static void Test_Us_BFu0s_BFu7c()
{
  {
    init_simple_test("Us_BFu0s_BFu7c");
    static STRUCT_IF_C Us_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu7c, Us_BFu0s_BFu7c)
//============================================================================


struct  Us_BFu0s_BFu7i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Us_BFu0s_BFu7i) C1{ Fs Fs:0 Fi:7}



static void Test_Us_BFu0s_BFu7i()
{
  {
    init_simple_test("Us_BFu0s_BFu7i");
    static STRUCT_IF_C Us_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu7i, Us_BFu0s_BFu7i)
//============================================================================


struct  Us_BFu0s_BFu7ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Us_BFu0s_BFu7ll) C1{ Fs Fs:0 FL:7}



static void Test_Us_BFu0s_BFu7ll()
{
  {
    init_simple_test("Us_BFu0s_BFu7ll");
    static STRUCT_IF_C Us_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu7ll, Us_BFu0s_BFu7ll)
//============================================================================


struct  Us_BFu0s_BFu7s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Us_BFu0s_BFu7s) C1{ Fs Fs:0 Fs:7}



static void Test_Us_BFu0s_BFu7s()
{
  {
    init_simple_test("Us_BFu0s_BFu7s");
    static STRUCT_IF_C Us_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu7s, Us_BFu0s_BFu7s)
//============================================================================


struct  Us_BFu0s_BFu8c  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Us_BFu0s_BFu8c) C1{ Fs Fs:0 Fc:8}



static void Test_Us_BFu0s_BFu8c()
{
  {
    init_simple_test("Us_BFu0s_BFu8c");
    static STRUCT_IF_C Us_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu8c, Us_BFu0s_BFu8c)
//============================================================================


struct  Us_BFu0s_BFu8i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Us_BFu0s_BFu8i) C1{ Fs Fs:0 Fi:8}



static void Test_Us_BFu0s_BFu8i()
{
  {
    init_simple_test("Us_BFu0s_BFu8i");
    static STRUCT_IF_C Us_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu8i, Us_BFu0s_BFu8i)
//============================================================================


struct  Us_BFu0s_BFu8ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Us_BFu0s_BFu8ll) C1{ Fs Fs:0 FL:8}



static void Test_Us_BFu0s_BFu8ll()
{
  {
    init_simple_test("Us_BFu0s_BFu8ll");
    static STRUCT_IF_C Us_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu8ll, Us_BFu0s_BFu8ll)
//============================================================================


struct  Us_BFu0s_BFu8s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Us_BFu0s_BFu8s) C1{ Fs Fs:0 Fs:8}



static void Test_Us_BFu0s_BFu8s()
{
  {
    init_simple_test("Us_BFu0s_BFu8s");
    static STRUCT_IF_C Us_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu8s, Us_BFu0s_BFu8s)
//============================================================================


struct  Us_BFu0s_BFu9i  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Us_BFu0s_BFu9i) C1{ Fs Fs:0 Fi:9}



static void Test_Us_BFu0s_BFu9i()
{
  {
    init_simple_test("Us_BFu0s_BFu9i");
    static STRUCT_IF_C Us_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu9i, Us_BFu0s_BFu9i)
//============================================================================


struct  Us_BFu0s_BFu9ll  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Us_BFu0s_BFu9ll) C1{ Fs Fs:0 FL:9}



static void Test_Us_BFu0s_BFu9ll()
{
  {
    init_simple_test("Us_BFu0s_BFu9ll");
    static STRUCT_IF_C Us_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu9ll, Us_BFu0s_BFu9ll)
//============================================================================


struct  Us_BFu0s_BFu9s  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Us_BFu0s_BFu9s) C1{ Fs Fs:0 Fs:9}



static void Test_Us_BFu0s_BFu9s()
{
  {
    init_simple_test("Us_BFu0s_BFu9s");
    static STRUCT_IF_C Us_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_BFu9s, Us_BFu0s_BFu9s)
//============================================================================


struct  Us_BFu0s_C  {
  unsigned short v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Us_BFu0s_C) C1{ Fs Fs:0 Fc}



static void Test_Us_BFu0s_C()
{
  {
    init_simple_test("Us_BFu0s_C");
    static STRUCT_IF_C Us_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_C, Us_BFu0s_C)
//============================================================================


struct  Us_BFu0s_D  {
  unsigned short v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Us_BFu0s_D) C1{ Fs Fs:0 FL}



static void Test_Us_BFu0s_D()
{
  {
    init_simple_test("Us_BFu0s_D");
    static STRUCT_IF_C Us_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_D, Us_BFu0s_D)
//============================================================================


struct  Us_BFu0s_F  {
  unsigned short v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Us_BFu0s_F) C1{ Fs Fs:0 Fi}



static void Test_Us_BFu0s_F()
{
  {
    init_simple_test("Us_BFu0s_F");
    static STRUCT_IF_C Us_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_F, Us_BFu0s_F)
//============================================================================


struct  Us_BFu0s_I  {
  unsigned short v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Us_BFu0s_I) C1{ Fs Fs:0 Fi}



static void Test_Us_BFu0s_I()
{
  {
    init_simple_test("Us_BFu0s_I");
    static STRUCT_IF_C Us_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_I, Us_BFu0s_I)
//============================================================================


struct  Us_BFu0s_Ip  {
  unsigned short v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Us_BFu0s_Ip) C1{ Fs Fs:0 Fp}



static void Test_Us_BFu0s_Ip()
{
  {
    init_simple_test("Us_BFu0s_Ip");
    static STRUCT_IF_C Us_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_Ip, Us_BFu0s_Ip)
//============================================================================


struct  Us_BFu0s_L  {
  unsigned short v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Us_BFu0s_L) C1{ Fs Fs:0 FL}



static void Test_Us_BFu0s_L()
{
  {
    init_simple_test("Us_BFu0s_L");
    static STRUCT_IF_C Us_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_L, Us_BFu0s_L)
//============================================================================


struct  Us_BFu0s_S  {
  unsigned short v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Us_BFu0s_S) C1{ Fs Fs:0 Fs}



static void Test_Us_BFu0s_S()
{
  {
    init_simple_test("Us_BFu0s_S");
    static STRUCT_IF_C Us_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_S, Us_BFu0s_S)
//============================================================================


struct  Us_BFu0s_Uc  {
  unsigned short v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Us_BFu0s_Uc) C1{ Fs Fs:0 Fc}



static void Test_Us_BFu0s_Uc()
{
  {
    init_simple_test("Us_BFu0s_Uc");
    static STRUCT_IF_C Us_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_Uc, Us_BFu0s_Uc)
//============================================================================


struct  Us_BFu0s_Ui  {
  unsigned short v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Us_BFu0s_Ui) C1{ Fs Fs:0 Fi}



static void Test_Us_BFu0s_Ui()
{
  {
    init_simple_test("Us_BFu0s_Ui");
    static STRUCT_IF_C Us_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "Us_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_Ui, Us_BFu0s_Ui)
//============================================================================


struct  Us_BFu0s_Ul  {
  unsigned short v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Us_BFu0s_Ul) C1{ Fs Fs:0 FL}



static void Test_Us_BFu0s_Ul()
{
  {
    init_simple_test("Us_BFu0s_Ul");
    static STRUCT_IF_C Us_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_Ul, Us_BFu0s_Ul)
//============================================================================


struct  Us_BFu0s_Us  {
  unsigned short v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Us_BFu0s_Us) C1{ Fs Fs:0 Fs}



static void Test_Us_BFu0s_Us()
{
  {
    init_simple_test("Us_BFu0s_Us");
    static STRUCT_IF_C Us_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "Us_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_Us, Us_BFu0s_Us)
//============================================================================


struct  Us_BFu0s_Vp  {
  unsigned short v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Us_BFu0s_Vp) C1{ Fs Fs:0 Fp}



static void Test_Us_BFu0s_Vp()
{
  {
    init_simple_test("Us_BFu0s_Vp");
    static STRUCT_IF_C Us_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Us_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu0s_Vp, Us_BFu0s_Vp)
//============================================================================


struct  Us_BFu15i_BFu0c  {
  unsigned short v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Us_BFu15i_BFu0c) C1{ Fs Fi:15 Fc:0}



static void Test_Us_BFu15i_BFu0c()
{
  {
    init_simple_test("Us_BFu15i_BFu0c");
    static STRUCT_IF_C Us_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15i_BFu0c, Us_BFu15i_BFu0c)
//============================================================================


struct  Us_BFu15i_BFu0i  {
  unsigned short v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Us_BFu15i_BFu0i) C1{ Fs Fi:15 Fi:0}



static void Test_Us_BFu15i_BFu0i()
{
  {
    init_simple_test("Us_BFu15i_BFu0i");
    static STRUCT_IF_C Us_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15i_BFu0i, Us_BFu15i_BFu0i)
//============================================================================


struct  Us_BFu15i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Us_BFu15i_BFu0ll) C1{ Fs Fi:15 FL:0}



static void Test_Us_BFu15i_BFu0ll()
{
  {
    init_simple_test("Us_BFu15i_BFu0ll");
    static STRUCT_IF_C Us_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15i_BFu0ll, Us_BFu15i_BFu0ll)
//============================================================================


struct  Us_BFu15i_BFu0s  {
  unsigned short v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Us_BFu15i_BFu0s) C1{ Fs Fi:15 Fs:0}



static void Test_Us_BFu15i_BFu0s()
{
  {
    init_simple_test("Us_BFu15i_BFu0s");
    static STRUCT_IF_C Us_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15i_BFu0s, Us_BFu15i_BFu0s)
//============================================================================


struct  Us_BFu15ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Us_BFu15ll_BFu0c) C1{ Fs FL:15 Fc:0}



static void Test_Us_BFu15ll_BFu0c()
{
  {
    init_simple_test("Us_BFu15ll_BFu0c");
    static STRUCT_IF_C Us_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15ll_BFu0c, Us_BFu15ll_BFu0c)
//============================================================================


struct  Us_BFu15ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Us_BFu15ll_BFu0i) C1{ Fs FL:15 Fi:0}



static void Test_Us_BFu15ll_BFu0i()
{
  {
    init_simple_test("Us_BFu15ll_BFu0i");
    static STRUCT_IF_C Us_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15ll_BFu0i, Us_BFu15ll_BFu0i)
//============================================================================


struct  Us_BFu15ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Us_BFu15ll_BFu0ll) C1{ Fs FL:15 FL:0}



static void Test_Us_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu15ll_BFu0ll");
    static STRUCT_IF_C Us_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15ll_BFu0ll, Us_BFu15ll_BFu0ll)
//============================================================================


struct  Us_BFu15ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Us_BFu15ll_BFu0s) C1{ Fs FL:15 Fs:0}



static void Test_Us_BFu15ll_BFu0s()
{
  {
    init_simple_test("Us_BFu15ll_BFu0s");
    static STRUCT_IF_C Us_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15ll_BFu0s, Us_BFu15ll_BFu0s)
//============================================================================


struct  Us_BFu15s_BFu0c  {
  unsigned short v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Us_BFu15s_BFu0c) C1{ Fs Fs:15 Fc:0}



static void Test_Us_BFu15s_BFu0c()
{
  {
    init_simple_test("Us_BFu15s_BFu0c");
    static STRUCT_IF_C Us_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15s_BFu0c, Us_BFu15s_BFu0c)
//============================================================================


struct  Us_BFu15s_BFu0i  {
  unsigned short v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Us_BFu15s_BFu0i) C1{ Fs Fs:15 Fi:0}



static void Test_Us_BFu15s_BFu0i()
{
  {
    init_simple_test("Us_BFu15s_BFu0i");
    static STRUCT_IF_C Us_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15s_BFu0i, Us_BFu15s_BFu0i)
//============================================================================


struct  Us_BFu15s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Us_BFu15s_BFu0ll) C1{ Fs Fs:15 FL:0}



static void Test_Us_BFu15s_BFu0ll()
{
  {
    init_simple_test("Us_BFu15s_BFu0ll");
    static STRUCT_IF_C Us_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15s_BFu0ll, Us_BFu15s_BFu0ll)
//============================================================================


struct  Us_BFu15s_BFu0s  {
  unsigned short v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Us_BFu15s_BFu0s) C1{ Fs Fs:15 Fs:0}



static void Test_Us_BFu15s_BFu0s()
{
  {
    init_simple_test("Us_BFu15s_BFu0s");
    static STRUCT_IF_C Us_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "Us_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "Us_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu15s_BFu0s, Us_BFu15s_BFu0s)
//============================================================================


struct  Us_BFu16i_BFu0c  {
  unsigned short v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Us_BFu16i_BFu0c) C1{ Fs Fi:16 Fc:0}



static void Test_Us_BFu16i_BFu0c()
{
  {
    init_simple_test("Us_BFu16i_BFu0c");
    static STRUCT_IF_C Us_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16i_BFu0c, Us_BFu16i_BFu0c)
//============================================================================


struct  Us_BFu16i_BFu0i  {
  unsigned short v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Us_BFu16i_BFu0i) C1{ Fs Fi:16 Fi:0}



static void Test_Us_BFu16i_BFu0i()
{
  {
    init_simple_test("Us_BFu16i_BFu0i");
    static STRUCT_IF_C Us_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16i_BFu0i, Us_BFu16i_BFu0i)
//============================================================================


struct  Us_BFu16i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Us_BFu16i_BFu0ll) C1{ Fs Fi:16 FL:0}



static void Test_Us_BFu16i_BFu0ll()
{
  {
    init_simple_test("Us_BFu16i_BFu0ll");
    static STRUCT_IF_C Us_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16i_BFu0ll, Us_BFu16i_BFu0ll)
//============================================================================


struct  Us_BFu16i_BFu0s  {
  unsigned short v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Us_BFu16i_BFu0s) C1{ Fs Fi:16 Fs:0}



static void Test_Us_BFu16i_BFu0s()
{
  {
    init_simple_test("Us_BFu16i_BFu0s");
    static STRUCT_IF_C Us_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16i_BFu0s, Us_BFu16i_BFu0s)
//============================================================================


struct  Us_BFu16ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Us_BFu16ll_BFu0c) C1{ Fs FL:16 Fc:0}



static void Test_Us_BFu16ll_BFu0c()
{
  {
    init_simple_test("Us_BFu16ll_BFu0c");
    static STRUCT_IF_C Us_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16ll_BFu0c, Us_BFu16ll_BFu0c)
//============================================================================


struct  Us_BFu16ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Us_BFu16ll_BFu0i) C1{ Fs FL:16 Fi:0}



static void Test_Us_BFu16ll_BFu0i()
{
  {
    init_simple_test("Us_BFu16ll_BFu0i");
    static STRUCT_IF_C Us_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16ll_BFu0i, Us_BFu16ll_BFu0i)
//============================================================================


struct  Us_BFu16ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Us_BFu16ll_BFu0ll) C1{ Fs FL:16 FL:0}



static void Test_Us_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu16ll_BFu0ll");
    static STRUCT_IF_C Us_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16ll_BFu0ll, Us_BFu16ll_BFu0ll)
//============================================================================


struct  Us_BFu16ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Us_BFu16ll_BFu0s) C1{ Fs FL:16 Fs:0}



static void Test_Us_BFu16ll_BFu0s()
{
  {
    init_simple_test("Us_BFu16ll_BFu0s");
    static STRUCT_IF_C Us_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16ll_BFu0s, Us_BFu16ll_BFu0s)
//============================================================================


struct  Us_BFu16s_BFu0c  {
  unsigned short v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Us_BFu16s_BFu0c) C1{ Fs Fs:16 Fc:0}



static void Test_Us_BFu16s_BFu0c()
{
  {
    init_simple_test("Us_BFu16s_BFu0c");
    static STRUCT_IF_C Us_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16s_BFu0c, Us_BFu16s_BFu0c)
//============================================================================


struct  Us_BFu16s_BFu0i  {
  unsigned short v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Us_BFu16s_BFu0i) C1{ Fs Fs:16 Fi:0}



static void Test_Us_BFu16s_BFu0i()
{
  {
    init_simple_test("Us_BFu16s_BFu0i");
    static STRUCT_IF_C Us_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16s_BFu0i, Us_BFu16s_BFu0i)
//============================================================================


struct  Us_BFu16s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Us_BFu16s_BFu0ll) C1{ Fs Fs:16 FL:0}



static void Test_Us_BFu16s_BFu0ll()
{
  {
    init_simple_test("Us_BFu16s_BFu0ll");
    static STRUCT_IF_C Us_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16s_BFu0ll, Us_BFu16s_BFu0ll)
//============================================================================


struct  Us_BFu16s_BFu0s  {
  unsigned short v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Us_BFu16s_BFu0s) C1{ Fs Fs:16 Fs:0}



static void Test_Us_BFu16s_BFu0s()
{
  {
    init_simple_test("Us_BFu16s_BFu0s");
    static STRUCT_IF_C Us_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "Us_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "Us_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu16s_BFu0s, Us_BFu16s_BFu0s)
//============================================================================


struct  Us_BFu17i_BFu0c  {
  unsigned short v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Us_BFu17i_BFu0c) C1{ Fs Fi:17 Fc:0}



static void Test_Us_BFu17i_BFu0c()
{
  {
    init_simple_test("Us_BFu17i_BFu0c");
    static STRUCT_IF_C Us_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17i_BFu0c, Us_BFu17i_BFu0c)
//============================================================================


struct  Us_BFu17i_BFu0i  {
  unsigned short v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Us_BFu17i_BFu0i) C1{ Fs Fi:17 Fi:0}



static void Test_Us_BFu17i_BFu0i()
{
  {
    init_simple_test("Us_BFu17i_BFu0i");
    static STRUCT_IF_C Us_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17i_BFu0i, Us_BFu17i_BFu0i)
//============================================================================


struct  Us_BFu17i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Us_BFu17i_BFu0ll) C1{ Fs Fi:17 FL:0}



static void Test_Us_BFu17i_BFu0ll()
{
  {
    init_simple_test("Us_BFu17i_BFu0ll");
    static STRUCT_IF_C Us_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17i_BFu0ll, Us_BFu17i_BFu0ll)
//============================================================================


struct  Us_BFu17i_BFu0s  {
  unsigned short v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Us_BFu17i_BFu0s) C1{ Fs Fi:17 Fs:0}



static void Test_Us_BFu17i_BFu0s()
{
  {
    init_simple_test("Us_BFu17i_BFu0s");
    static STRUCT_IF_C Us_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "Us_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "Us_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17i_BFu0s, Us_BFu17i_BFu0s)
//============================================================================


struct  Us_BFu17ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Us_BFu17ll_BFu0c) C1{ Fs FL:17 Fc:0}



static void Test_Us_BFu17ll_BFu0c()
{
  {
    init_simple_test("Us_BFu17ll_BFu0c");
    static STRUCT_IF_C Us_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17ll_BFu0c, Us_BFu17ll_BFu0c)
//============================================================================


struct  Us_BFu17ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Us_BFu17ll_BFu0i) C1{ Fs FL:17 Fi:0}



static void Test_Us_BFu17ll_BFu0i()
{
  {
    init_simple_test("Us_BFu17ll_BFu0i");
    static STRUCT_IF_C Us_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17ll_BFu0i, Us_BFu17ll_BFu0i)
//============================================================================


struct  Us_BFu17ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Us_BFu17ll_BFu0ll) C1{ Fs FL:17 FL:0}



static void Test_Us_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu17ll_BFu0ll");
    static STRUCT_IF_C Us_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17ll_BFu0ll, Us_BFu17ll_BFu0ll)
//============================================================================


struct  Us_BFu17ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Us_BFu17ll_BFu0s) C1{ Fs FL:17 Fs:0}



static void Test_Us_BFu17ll_BFu0s()
{
  {
    init_simple_test("Us_BFu17ll_BFu0s");
    static STRUCT_IF_C Us_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "Us_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "Us_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu17ll_BFu0s, Us_BFu17ll_BFu0s)
//============================================================================


struct  Us_BFu1c_BFu0c  {
  unsigned short v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1c_BFu0c) C1{ Fs Fc:1 Fc:0}



static void Test_Us_BFu1c_BFu0c()
{
  {
    init_simple_test("Us_BFu1c_BFu0c");
    static STRUCT_IF_C Us_BFu1c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1c_BFu0c, Us_BFu1c_BFu0c)
//============================================================================


struct  Us_BFu1c_BFu0i  {
  unsigned short v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1c_BFu0i) C1{ Fs Fc:1 Fi:0}



static void Test_Us_BFu1c_BFu0i()
{
  {
    init_simple_test("Us_BFu1c_BFu0i");
    static STRUCT_IF_C Us_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1c_BFu0i, Us_BFu1c_BFu0i)
//============================================================================


struct  Us_BFu1c_BFu0ll  {
  unsigned short v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1c_BFu0ll) C1{ Fs Fc:1 FL:0}



static void Test_Us_BFu1c_BFu0ll()
{
  {
    init_simple_test("Us_BFu1c_BFu0ll");
    static STRUCT_IF_C Us_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1c_BFu0ll, Us_BFu1c_BFu0ll)
//============================================================================


struct  Us_BFu1c_BFu0s  {
  unsigned short v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1c_BFu0s) C1{ Fs Fc:1 Fs:0}



static void Test_Us_BFu1c_BFu0s()
{
  {
    init_simple_test("Us_BFu1c_BFu0s");
    static STRUCT_IF_C Us_BFu1c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1c_BFu0s, Us_BFu1c_BFu0s)
//============================================================================


struct  Us_BFu1i_BFu0c  {
  unsigned short v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1i_BFu0c) C1{ Fs Fi:1 Fc:0}



static void Test_Us_BFu1i_BFu0c()
{
  {
    init_simple_test("Us_BFu1i_BFu0c");
    static STRUCT_IF_C Us_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1i_BFu0c, Us_BFu1i_BFu0c)
//============================================================================


struct  Us_BFu1i_BFu0i  {
  unsigned short v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1i_BFu0i) C1{ Fs Fi:1 Fi:0}



static void Test_Us_BFu1i_BFu0i()
{
  {
    init_simple_test("Us_BFu1i_BFu0i");
    static STRUCT_IF_C Us_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1i_BFu0i, Us_BFu1i_BFu0i)
//============================================================================


struct  Us_BFu1i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1i_BFu0ll) C1{ Fs Fi:1 FL:0}



static void Test_Us_BFu1i_BFu0ll()
{
  {
    init_simple_test("Us_BFu1i_BFu0ll");
    static STRUCT_IF_C Us_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1i_BFu0ll, Us_BFu1i_BFu0ll)
//============================================================================


struct  Us_BFu1i_BFu0s  {
  unsigned short v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1i_BFu0s) C1{ Fs Fi:1 Fs:0}



static void Test_Us_BFu1i_BFu0s()
{
  {
    init_simple_test("Us_BFu1i_BFu0s");
    static STRUCT_IF_C Us_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1i_BFu0s, Us_BFu1i_BFu0s)
//============================================================================


struct  Us_BFu1ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1ll_BFu0c) C1{ Fs FL:1 Fc:0}



static void Test_Us_BFu1ll_BFu0c()
{
  {
    init_simple_test("Us_BFu1ll_BFu0c");
    static STRUCT_IF_C Us_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1ll_BFu0c, Us_BFu1ll_BFu0c)
//============================================================================


struct  Us_BFu1ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1ll_BFu0i) C1{ Fs FL:1 Fi:0}



static void Test_Us_BFu1ll_BFu0i()
{
  {
    init_simple_test("Us_BFu1ll_BFu0i");
    static STRUCT_IF_C Us_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1ll_BFu0i, Us_BFu1ll_BFu0i)
//============================================================================


struct  Us_BFu1ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1ll_BFu0ll) C1{ Fs FL:1 FL:0}



static void Test_Us_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu1ll_BFu0ll");
    static STRUCT_IF_C Us_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1ll_BFu0ll, Us_BFu1ll_BFu0ll)
//============================================================================


struct  Us_BFu1ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1ll_BFu0s) C1{ Fs FL:1 Fs:0}



static void Test_Us_BFu1ll_BFu0s()
{
  {
    init_simple_test("Us_BFu1ll_BFu0s");
    static STRUCT_IF_C Us_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1ll_BFu0s, Us_BFu1ll_BFu0s)
//============================================================================


struct  Us_BFu1s_BFu0c  {
  unsigned short v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Us_BFu1s_BFu0c) C1{ Fs Fs:1 Fc:0}



static void Test_Us_BFu1s_BFu0c()
{
  {
    init_simple_test("Us_BFu1s_BFu0c");
    static STRUCT_IF_C Us_BFu1s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1s_BFu0c, Us_BFu1s_BFu0c)
//============================================================================


struct  Us_BFu1s_BFu0i  {
  unsigned short v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Us_BFu1s_BFu0i) C1{ Fs Fs:1 Fi:0}



static void Test_Us_BFu1s_BFu0i()
{
  {
    init_simple_test("Us_BFu1s_BFu0i");
    static STRUCT_IF_C Us_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1s_BFu0i, Us_BFu1s_BFu0i)
//============================================================================


struct  Us_BFu1s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Us_BFu1s_BFu0ll) C1{ Fs Fs:1 FL:0}



static void Test_Us_BFu1s_BFu0ll()
{
  {
    init_simple_test("Us_BFu1s_BFu0ll");
    static STRUCT_IF_C Us_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1s_BFu0ll, Us_BFu1s_BFu0ll)
//============================================================================


struct  Us_BFu1s_BFu0s  {
  unsigned short v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Us_BFu1s_BFu0s) C1{ Fs Fs:1 Fs:0}



static void Test_Us_BFu1s_BFu0s()
{
  {
    init_simple_test("Us_BFu1s_BFu0s");
    static STRUCT_IF_C Us_BFu1s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "Us_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu1s_BFu0s, Us_BFu1s_BFu0s)
//============================================================================


struct  Us_BFu31i_BFu0c  {
  unsigned short v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Us_BFu31i_BFu0c) C1{ Fs Fi:31 Fc:0}



static void Test_Us_BFu31i_BFu0c()
{
  {
    init_simple_test("Us_BFu31i_BFu0c");
    static STRUCT_IF_C Us_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31i_BFu0c, Us_BFu31i_BFu0c)
//============================================================================


struct  Us_BFu31i_BFu0i  {
  unsigned short v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Us_BFu31i_BFu0i) C1{ Fs Fi:31 Fi:0}



static void Test_Us_BFu31i_BFu0i()
{
  {
    init_simple_test("Us_BFu31i_BFu0i");
    static STRUCT_IF_C Us_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31i_BFu0i, Us_BFu31i_BFu0i)
//============================================================================


struct  Us_BFu31i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Us_BFu31i_BFu0ll) C1{ Fs Fi:31 FL:0}



static void Test_Us_BFu31i_BFu0ll()
{
  {
    init_simple_test("Us_BFu31i_BFu0ll");
    static STRUCT_IF_C Us_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31i_BFu0ll, Us_BFu31i_BFu0ll)
//============================================================================


struct  Us_BFu31i_BFu0s  {
  unsigned short v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Us_BFu31i_BFu0s) C1{ Fs Fi:31 Fs:0}



static void Test_Us_BFu31i_BFu0s()
{
  {
    init_simple_test("Us_BFu31i_BFu0s");
    static STRUCT_IF_C Us_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "Us_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "Us_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31i_BFu0s, Us_BFu31i_BFu0s)
//============================================================================


struct  Us_BFu31ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Us_BFu31ll_BFu0c) C1{ Fs FL:31 Fc:0}



static void Test_Us_BFu31ll_BFu0c()
{
  {
    init_simple_test("Us_BFu31ll_BFu0c");
    static STRUCT_IF_C Us_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31ll_BFu0c, Us_BFu31ll_BFu0c)
//============================================================================


struct  Us_BFu31ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Us_BFu31ll_BFu0i) C1{ Fs FL:31 Fi:0}



static void Test_Us_BFu31ll_BFu0i()
{
  {
    init_simple_test("Us_BFu31ll_BFu0i");
    static STRUCT_IF_C Us_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31ll_BFu0i, Us_BFu31ll_BFu0i)
//============================================================================


struct  Us_BFu31ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Us_BFu31ll_BFu0ll) C1{ Fs FL:31 FL:0}



static void Test_Us_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu31ll_BFu0ll");
    static STRUCT_IF_C Us_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31ll_BFu0ll, Us_BFu31ll_BFu0ll)
//============================================================================


struct  Us_BFu31ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Us_BFu31ll_BFu0s) C1{ Fs FL:31 Fs:0}



static void Test_Us_BFu31ll_BFu0s()
{
  {
    init_simple_test("Us_BFu31ll_BFu0s");
    static STRUCT_IF_C Us_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "Us_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "Us_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu31ll_BFu0s, Us_BFu31ll_BFu0s)
//============================================================================


struct  Us_BFu32i_BFu0c  {
  unsigned short v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Us_BFu32i_BFu0c) C1{ Fs Fi:32 Fc:0}



static void Test_Us_BFu32i_BFu0c()
{
  {
    init_simple_test("Us_BFu32i_BFu0c");
    static STRUCT_IF_C Us_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32i_BFu0c, Us_BFu32i_BFu0c)
//============================================================================


struct  Us_BFu32i_BFu0i  {
  unsigned short v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Us_BFu32i_BFu0i) C1{ Fs Fi:32 Fi:0}



static void Test_Us_BFu32i_BFu0i()
{
  {
    init_simple_test("Us_BFu32i_BFu0i");
    static STRUCT_IF_C Us_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32i_BFu0i, Us_BFu32i_BFu0i)
//============================================================================


struct  Us_BFu32i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Us_BFu32i_BFu0ll) C1{ Fs Fi:32 FL:0}



static void Test_Us_BFu32i_BFu0ll()
{
  {
    init_simple_test("Us_BFu32i_BFu0ll");
    static STRUCT_IF_C Us_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32i_BFu0ll, Us_BFu32i_BFu0ll)
//============================================================================


struct  Us_BFu32i_BFu0s  {
  unsigned short v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Us_BFu32i_BFu0s) C1{ Fs Fi:32 Fs:0}



static void Test_Us_BFu32i_BFu0s()
{
  {
    init_simple_test("Us_BFu32i_BFu0s");
    static STRUCT_IF_C Us_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "Us_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "Us_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32i_BFu0s, Us_BFu32i_BFu0s)
//============================================================================


struct  Us_BFu32ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Us_BFu32ll_BFu0c) C1{ Fs FL:32 Fc:0}



static void Test_Us_BFu32ll_BFu0c()
{
  {
    init_simple_test("Us_BFu32ll_BFu0c");
    static STRUCT_IF_C Us_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32ll_BFu0c, Us_BFu32ll_BFu0c)
//============================================================================


struct  Us_BFu32ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Us_BFu32ll_BFu0i) C1{ Fs FL:32 Fi:0}



static void Test_Us_BFu32ll_BFu0i()
{
  {
    init_simple_test("Us_BFu32ll_BFu0i");
    static STRUCT_IF_C Us_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32ll_BFu0i, Us_BFu32ll_BFu0i)
//============================================================================


struct  Us_BFu32ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Us_BFu32ll_BFu0ll) C1{ Fs FL:32 FL:0}



static void Test_Us_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu32ll_BFu0ll");
    static STRUCT_IF_C Us_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32ll_BFu0ll, Us_BFu32ll_BFu0ll)
//============================================================================


struct  Us_BFu32ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Us_BFu32ll_BFu0s) C1{ Fs FL:32 Fs:0}



static void Test_Us_BFu32ll_BFu0s()
{
  {
    init_simple_test("Us_BFu32ll_BFu0s");
    static STRUCT_IF_C Us_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "Us_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "Us_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu32ll_BFu0s, Us_BFu32ll_BFu0s)
//============================================================================


struct  Us_BFu33_BFu0c  {
  unsigned short v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Us_BFu33_BFu0c) C1{ Fs FL:33 Fc:0}



static void Test_Us_BFu33_BFu0c()
{
  {
    init_simple_test("Us_BFu33_BFu0c");
    static STRUCT_IF_C Us_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu33_BFu0c, Us_BFu33_BFu0c)
//============================================================================


struct  Us_BFu33_BFu0i  {
  unsigned short v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Us_BFu33_BFu0i) C1{ Fs FL:33 Fi:0}



static void Test_Us_BFu33_BFu0i()
{
  {
    init_simple_test("Us_BFu33_BFu0i");
    static STRUCT_IF_C Us_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu33_BFu0i, Us_BFu33_BFu0i)
//============================================================================


struct  Us_BFu33_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Us_BFu33_BFu0ll) C1{ Fs FL:33 FL:0}



static void Test_Us_BFu33_BFu0ll()
{
  {
    init_simple_test("Us_BFu33_BFu0ll");
    static STRUCT_IF_C Us_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu33_BFu0ll, Us_BFu33_BFu0ll)
//============================================================================


struct  Us_BFu33_BFu0s  {
  unsigned short v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Us_BFu33_BFu0s) C1{ Fs FL:33 Fs:0}



static void Test_Us_BFu33_BFu0s()
{
  {
    init_simple_test("Us_BFu33_BFu0s");
    static STRUCT_IF_C Us_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "Us_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "Us_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu33_BFu0s, Us_BFu33_BFu0s)
//============================================================================


struct  Us_BFu7c_BFu0c  {
  unsigned short v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7c_BFu0c) C1{ Fs Fc:7 Fc:0}



static void Test_Us_BFu7c_BFu0c()
{
  {
    init_simple_test("Us_BFu7c_BFu0c");
    static STRUCT_IF_C Us_BFu7c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7c_BFu0c, Us_BFu7c_BFu0c)
//============================================================================


struct  Us_BFu7c_BFu0i  {
  unsigned short v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7c_BFu0i) C1{ Fs Fc:7 Fi:0}



static void Test_Us_BFu7c_BFu0i()
{
  {
    init_simple_test("Us_BFu7c_BFu0i");
    static STRUCT_IF_C Us_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7c_BFu0i, Us_BFu7c_BFu0i)
//============================================================================


struct  Us_BFu7c_BFu0ll  {
  unsigned short v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7c_BFu0ll) C1{ Fs Fc:7 FL:0}



static void Test_Us_BFu7c_BFu0ll()
{
  {
    init_simple_test("Us_BFu7c_BFu0ll");
    static STRUCT_IF_C Us_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7c_BFu0ll, Us_BFu7c_BFu0ll)
//============================================================================


struct  Us_BFu7c_BFu0s  {
  unsigned short v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7c_BFu0s) C1{ Fs Fc:7 Fs:0}



static void Test_Us_BFu7c_BFu0s()
{
  {
    init_simple_test("Us_BFu7c_BFu0s");
    static STRUCT_IF_C Us_BFu7c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7c_BFu0s, Us_BFu7c_BFu0s)
//============================================================================


struct  Us_BFu7i_BFu0c  {
  unsigned short v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7i_BFu0c) C1{ Fs Fi:7 Fc:0}



static void Test_Us_BFu7i_BFu0c()
{
  {
    init_simple_test("Us_BFu7i_BFu0c");
    static STRUCT_IF_C Us_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7i_BFu0c, Us_BFu7i_BFu0c)
//============================================================================


struct  Us_BFu7i_BFu0i  {
  unsigned short v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7i_BFu0i) C1{ Fs Fi:7 Fi:0}



static void Test_Us_BFu7i_BFu0i()
{
  {
    init_simple_test("Us_BFu7i_BFu0i");
    static STRUCT_IF_C Us_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7i_BFu0i, Us_BFu7i_BFu0i)
//============================================================================


struct  Us_BFu7i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7i_BFu0ll) C1{ Fs Fi:7 FL:0}



static void Test_Us_BFu7i_BFu0ll()
{
  {
    init_simple_test("Us_BFu7i_BFu0ll");
    static STRUCT_IF_C Us_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7i_BFu0ll, Us_BFu7i_BFu0ll)
//============================================================================


struct  Us_BFu7i_BFu0s  {
  unsigned short v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7i_BFu0s) C1{ Fs Fi:7 Fs:0}



static void Test_Us_BFu7i_BFu0s()
{
  {
    init_simple_test("Us_BFu7i_BFu0s");
    static STRUCT_IF_C Us_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7i_BFu0s, Us_BFu7i_BFu0s)
//============================================================================


struct  Us_BFu7ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7ll_BFu0c) C1{ Fs FL:7 Fc:0}



static void Test_Us_BFu7ll_BFu0c()
{
  {
    init_simple_test("Us_BFu7ll_BFu0c");
    static STRUCT_IF_C Us_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7ll_BFu0c, Us_BFu7ll_BFu0c)
//============================================================================


struct  Us_BFu7ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7ll_BFu0i) C1{ Fs FL:7 Fi:0}



static void Test_Us_BFu7ll_BFu0i()
{
  {
    init_simple_test("Us_BFu7ll_BFu0i");
    static STRUCT_IF_C Us_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7ll_BFu0i, Us_BFu7ll_BFu0i)
//============================================================================


struct  Us_BFu7ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7ll_BFu0ll) C1{ Fs FL:7 FL:0}



static void Test_Us_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu7ll_BFu0ll");
    static STRUCT_IF_C Us_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7ll_BFu0ll, Us_BFu7ll_BFu0ll)
//============================================================================


struct  Us_BFu7ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7ll_BFu0s) C1{ Fs FL:7 Fs:0}



static void Test_Us_BFu7ll_BFu0s()
{
  {
    init_simple_test("Us_BFu7ll_BFu0s");
    static STRUCT_IF_C Us_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7ll_BFu0s, Us_BFu7ll_BFu0s)
//============================================================================


struct  Us_BFu7s_BFu0c  {
  unsigned short v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Us_BFu7s_BFu0c) C1{ Fs Fs:7 Fc:0}



static void Test_Us_BFu7s_BFu0c()
{
  {
    init_simple_test("Us_BFu7s_BFu0c");
    static STRUCT_IF_C Us_BFu7s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7s_BFu0c, Us_BFu7s_BFu0c)
//============================================================================


struct  Us_BFu7s_BFu0i  {
  unsigned short v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Us_BFu7s_BFu0i) C1{ Fs Fs:7 Fi:0}



static void Test_Us_BFu7s_BFu0i()
{
  {
    init_simple_test("Us_BFu7s_BFu0i");
    static STRUCT_IF_C Us_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7s_BFu0i, Us_BFu7s_BFu0i)
//============================================================================


struct  Us_BFu7s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Us_BFu7s_BFu0ll) C1{ Fs Fs:7 FL:0}



static void Test_Us_BFu7s_BFu0ll()
{
  {
    init_simple_test("Us_BFu7s_BFu0ll");
    static STRUCT_IF_C Us_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7s_BFu0ll, Us_BFu7s_BFu0ll)
//============================================================================


struct  Us_BFu7s_BFu0s  {
  unsigned short v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Us_BFu7s_BFu0s) C1{ Fs Fs:7 Fs:0}



static void Test_Us_BFu7s_BFu0s()
{
  {
    init_simple_test("Us_BFu7s_BFu0s");
    static STRUCT_IF_C Us_BFu7s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "Us_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "Us_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu7s_BFu0s, Us_BFu7s_BFu0s)
//============================================================================


struct  Us_BFu8c_BFu0c  {
  unsigned short v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8c_BFu0c) C1{ Fs Fc:8 Fc:0}



static void Test_Us_BFu8c_BFu0c()
{
  {
    init_simple_test("Us_BFu8c_BFu0c");
    static STRUCT_IF_C Us_BFu8c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8c_BFu0c, Us_BFu8c_BFu0c)
//============================================================================


struct  Us_BFu8c_BFu0i  {
  unsigned short v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8c_BFu0i) C1{ Fs Fc:8 Fi:0}



static void Test_Us_BFu8c_BFu0i()
{
  {
    init_simple_test("Us_BFu8c_BFu0i");
    static STRUCT_IF_C Us_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8c_BFu0i, Us_BFu8c_BFu0i)
//============================================================================


struct  Us_BFu8c_BFu0ll  {
  unsigned short v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8c_BFu0ll) C1{ Fs Fc:8 FL:0}



static void Test_Us_BFu8c_BFu0ll()
{
  {
    init_simple_test("Us_BFu8c_BFu0ll");
    static STRUCT_IF_C Us_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8c_BFu0ll, Us_BFu8c_BFu0ll)
//============================================================================


struct  Us_BFu8c_BFu0s  {
  unsigned short v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8c_BFu0s) C1{ Fs Fc:8 Fs:0}



static void Test_Us_BFu8c_BFu0s()
{
  {
    init_simple_test("Us_BFu8c_BFu0s");
    static STRUCT_IF_C Us_BFu8c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8c_BFu0s, Us_BFu8c_BFu0s)
//============================================================================


struct  Us_BFu8i_BFu0c  {
  unsigned short v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8i_BFu0c) C1{ Fs Fi:8 Fc:0}



static void Test_Us_BFu8i_BFu0c()
{
  {
    init_simple_test("Us_BFu8i_BFu0c");
    static STRUCT_IF_C Us_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8i_BFu0c, Us_BFu8i_BFu0c)
//============================================================================


struct  Us_BFu8i_BFu0i  {
  unsigned short v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8i_BFu0i) C1{ Fs Fi:8 Fi:0}



static void Test_Us_BFu8i_BFu0i()
{
  {
    init_simple_test("Us_BFu8i_BFu0i");
    static STRUCT_IF_C Us_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8i_BFu0i, Us_BFu8i_BFu0i)
//============================================================================


struct  Us_BFu8i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8i_BFu0ll) C1{ Fs Fi:8 FL:0}



static void Test_Us_BFu8i_BFu0ll()
{
  {
    init_simple_test("Us_BFu8i_BFu0ll");
    static STRUCT_IF_C Us_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8i_BFu0ll, Us_BFu8i_BFu0ll)
//============================================================================


struct  Us_BFu8i_BFu0s  {
  unsigned short v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8i_BFu0s) C1{ Fs Fi:8 Fs:0}



static void Test_Us_BFu8i_BFu0s()
{
  {
    init_simple_test("Us_BFu8i_BFu0s");
    static STRUCT_IF_C Us_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8i_BFu0s, Us_BFu8i_BFu0s)
//============================================================================


struct  Us_BFu8ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8ll_BFu0c) C1{ Fs FL:8 Fc:0}



static void Test_Us_BFu8ll_BFu0c()
{
  {
    init_simple_test("Us_BFu8ll_BFu0c");
    static STRUCT_IF_C Us_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8ll_BFu0c, Us_BFu8ll_BFu0c)
//============================================================================


struct  Us_BFu8ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8ll_BFu0i) C1{ Fs FL:8 Fi:0}



static void Test_Us_BFu8ll_BFu0i()
{
  {
    init_simple_test("Us_BFu8ll_BFu0i");
    static STRUCT_IF_C Us_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8ll_BFu0i, Us_BFu8ll_BFu0i)
//============================================================================


struct  Us_BFu8ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8ll_BFu0ll) C1{ Fs FL:8 FL:0}



static void Test_Us_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu8ll_BFu0ll");
    static STRUCT_IF_C Us_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8ll_BFu0ll, Us_BFu8ll_BFu0ll)
//============================================================================


struct  Us_BFu8ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8ll_BFu0s) C1{ Fs FL:8 Fs:0}



static void Test_Us_BFu8ll_BFu0s()
{
  {
    init_simple_test("Us_BFu8ll_BFu0s");
    static STRUCT_IF_C Us_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8ll_BFu0s, Us_BFu8ll_BFu0s)
//============================================================================


struct  Us_BFu8s_BFu0c  {
  unsigned short v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Us_BFu8s_BFu0c) C1{ Fs Fs:8 Fc:0}



static void Test_Us_BFu8s_BFu0c()
{
  {
    init_simple_test("Us_BFu8s_BFu0c");
    static STRUCT_IF_C Us_BFu8s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8s_BFu0c, Us_BFu8s_BFu0c)
//============================================================================


struct  Us_BFu8s_BFu0i  {
  unsigned short v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Us_BFu8s_BFu0i) C1{ Fs Fs:8 Fi:0}



static void Test_Us_BFu8s_BFu0i()
{
  {
    init_simple_test("Us_BFu8s_BFu0i");
    static STRUCT_IF_C Us_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8s_BFu0i, Us_BFu8s_BFu0i)
//============================================================================


struct  Us_BFu8s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Us_BFu8s_BFu0ll) C1{ Fs Fs:8 FL:0}



static void Test_Us_BFu8s_BFu0ll()
{
  {
    init_simple_test("Us_BFu8s_BFu0ll");
    static STRUCT_IF_C Us_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8s_BFu0ll, Us_BFu8s_BFu0ll)
//============================================================================


struct  Us_BFu8s_BFu0s  {
  unsigned short v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Us_BFu8s_BFu0s) C1{ Fs Fs:8 Fs:0}



static void Test_Us_BFu8s_BFu0s()
{
  {
    init_simple_test("Us_BFu8s_BFu0s");
    static STRUCT_IF_C Us_BFu8s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "Us_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "Us_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu8s_BFu0s, Us_BFu8s_BFu0s)
//============================================================================


struct  Us_BFu9i_BFu0c  {
  unsigned short v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Us_BFu9i_BFu0c) C1{ Fs Fi:9 Fc:0}



static void Test_Us_BFu9i_BFu0c()
{
  {
    init_simple_test("Us_BFu9i_BFu0c");
    static STRUCT_IF_C Us_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9i_BFu0c, Us_BFu9i_BFu0c)
//============================================================================


struct  Us_BFu9i_BFu0i  {
  unsigned short v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Us_BFu9i_BFu0i) C1{ Fs Fi:9 Fi:0}



static void Test_Us_BFu9i_BFu0i()
{
  {
    init_simple_test("Us_BFu9i_BFu0i");
    static STRUCT_IF_C Us_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9i_BFu0i, Us_BFu9i_BFu0i)
//============================================================================


struct  Us_BFu9i_BFu0ll  {
  unsigned short v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Us_BFu9i_BFu0ll) C1{ Fs Fi:9 FL:0}



static void Test_Us_BFu9i_BFu0ll()
{
  {
    init_simple_test("Us_BFu9i_BFu0ll");
    static STRUCT_IF_C Us_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9i_BFu0ll, Us_BFu9i_BFu0ll)
//============================================================================


struct  Us_BFu9i_BFu0s  {
  unsigned short v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Us_BFu9i_BFu0s) C1{ Fs Fi:9 Fs:0}



static void Test_Us_BFu9i_BFu0s()
{
  {
    init_simple_test("Us_BFu9i_BFu0s");
    static STRUCT_IF_C Us_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9i_BFu0s, Us_BFu9i_BFu0s)
//============================================================================


struct  Us_BFu9ll_BFu0c  {
  unsigned short v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Us_BFu9ll_BFu0c) C1{ Fs FL:9 Fc:0}



static void Test_Us_BFu9ll_BFu0c()
{
  {
    init_simple_test("Us_BFu9ll_BFu0c");
    static STRUCT_IF_C Us_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9ll_BFu0c, Us_BFu9ll_BFu0c)
//============================================================================


struct  Us_BFu9ll_BFu0i  {
  unsigned short v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Us_BFu9ll_BFu0i) C1{ Fs FL:9 Fi:0}



static void Test_Us_BFu9ll_BFu0i()
{
  {
    init_simple_test("Us_BFu9ll_BFu0i");
    static STRUCT_IF_C Us_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9ll_BFu0i, Us_BFu9ll_BFu0i)
//============================================================================


struct  Us_BFu9ll_BFu0ll  {
  unsigned short v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Us_BFu9ll_BFu0ll) C1{ Fs FL:9 FL:0}



static void Test_Us_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Us_BFu9ll_BFu0ll");
    static STRUCT_IF_C Us_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9ll_BFu0ll, Us_BFu9ll_BFu0ll)
//============================================================================


struct  Us_BFu9ll_BFu0s  {
  unsigned short v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Us_BFu9ll_BFu0s) C1{ Fs FL:9 Fs:0}



static void Test_Us_BFu9ll_BFu0s()
{
  {
    init_simple_test("Us_BFu9ll_BFu0s");
    static STRUCT_IF_C Us_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9ll_BFu0s, Us_BFu9ll_BFu0s)
//============================================================================


struct  Us_BFu9s_BFu0c  {
  unsigned short v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Us_BFu9s_BFu0c) C1{ Fs Fs:9 Fc:0}



static void Test_Us_BFu9s_BFu0c()
{
  {
    init_simple_test("Us_BFu9s_BFu0c");
    static STRUCT_IF_C Us_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9s_BFu0c, Us_BFu9s_BFu0c)
//============================================================================


struct  Us_BFu9s_BFu0i  {
  unsigned short v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Us_BFu9s_BFu0i) C1{ Fs Fs:9 Fi:0}



static void Test_Us_BFu9s_BFu0i()
{
  {
    init_simple_test("Us_BFu9s_BFu0i");
    static STRUCT_IF_C Us_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9s_BFu0i, Us_BFu9s_BFu0i)
//============================================================================


struct  Us_BFu9s_BFu0ll  {
  unsigned short v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Us_BFu9s_BFu0ll) C1{ Fs Fs:9 FL:0}



static void Test_Us_BFu9s_BFu0ll()
{
  {
    init_simple_test("Us_BFu9s_BFu0ll");
    static STRUCT_IF_C Us_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9s_BFu0ll, Us_BFu9s_BFu0ll)
//============================================================================


struct  Us_BFu9s_BFu0s  {
  unsigned short v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Us_BFu9s_BFu0s) C1{ Fs Fs:9 Fs:0}



static void Test_Us_BFu9s_BFu0s()
{
  {
    init_simple_test("Us_BFu9s_BFu0s");
    static STRUCT_IF_C Us_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "Us_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "Us_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_BFu9s_BFu0s, Us_BFu9s_BFu0s)
//============================================================================


struct  Us_C_BFu0c  {
  unsigned short v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Us_C_BFu0c) C1{ Fs Fc Fc:0}



static void Test_Us_C_BFu0c()
{
  {
    init_simple_test("Us_C_BFu0c");
    static STRUCT_IF_C Us_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_C_BFu0c, Us_C_BFu0c)
//============================================================================


struct  Us_C_BFu0i  {
  unsigned short v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Us_C_BFu0i) C1{ Fs Fc Fi:0}



static void Test_Us_C_BFu0i()
{
  {
    init_simple_test("Us_C_BFu0i");
    static STRUCT_IF_C Us_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_C_BFu0i, Us_C_BFu0i)
//============================================================================


struct  Us_C_BFu0ll  {
  unsigned short v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Us_C_BFu0ll) C1{ Fs Fc FL:0}



static void Test_Us_C_BFu0ll()
{
  {
    init_simple_test("Us_C_BFu0ll");
    static STRUCT_IF_C Us_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_C_BFu0ll, Us_C_BFu0ll)
//============================================================================


struct  Us_C_BFu0s  {
  unsigned short v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Us_C_BFu0s) C1{ Fs Fc Fs:0}



static void Test_Us_C_BFu0s()
{
  {
    init_simple_test("Us_C_BFu0s");
    static STRUCT_IF_C Us_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_C_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_C_BFu0s, Us_C_BFu0s)
//============================================================================


struct  Us_D_BFu0c  {
  unsigned short v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Us_D_BFu0c) C1{ Fs FL Fc:0}



static void Test_Us_D_BFu0c()
{
  {
    init_simple_test("Us_D_BFu0c");
    static STRUCT_IF_C Us_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_D_BFu0c, Us_D_BFu0c)
//============================================================================


struct  Us_D_BFu0i  {
  unsigned short v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Us_D_BFu0i) C1{ Fs FL Fi:0}



static void Test_Us_D_BFu0i()
{
  {
    init_simple_test("Us_D_BFu0i");
    static STRUCT_IF_C Us_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_D_BFu0i, Us_D_BFu0i)
//============================================================================


struct  Us_D_BFu0ll  {
  unsigned short v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Us_D_BFu0ll) C1{ Fs FL FL:0}



static void Test_Us_D_BFu0ll()
{
  {
    init_simple_test("Us_D_BFu0ll");
    static STRUCT_IF_C Us_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_D_BFu0ll, Us_D_BFu0ll)
//============================================================================


struct  Us_D_BFu0s  {
  unsigned short v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Us_D_BFu0s) C1{ Fs FL Fs:0}



static void Test_Us_D_BFu0s()
{
  {
    init_simple_test("Us_D_BFu0s");
    static STRUCT_IF_C Us_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_D_BFu0s, Us_D_BFu0s)
//============================================================================


struct  Us_F_BFu0c  {
  unsigned short v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Us_F_BFu0c) C1{ Fs Fi Fc:0}



static void Test_Us_F_BFu0c()
{
  {
    init_simple_test("Us_F_BFu0c");
    static STRUCT_IF_C Us_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_F_BFu0c, Us_F_BFu0c)
//============================================================================


struct  Us_F_BFu0i  {
  unsigned short v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Us_F_BFu0i) C1{ Fs Fi Fi:0}



static void Test_Us_F_BFu0i()
{
  {
    init_simple_test("Us_F_BFu0i");
    static STRUCT_IF_C Us_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_F_BFu0i, Us_F_BFu0i)
//============================================================================


struct  Us_F_BFu0ll  {
  unsigned short v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Us_F_BFu0ll) C1{ Fs Fi FL:0}



static void Test_Us_F_BFu0ll()
{
  {
    init_simple_test("Us_F_BFu0ll");
    static STRUCT_IF_C Us_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_F_BFu0ll, Us_F_BFu0ll)
//============================================================================


struct  Us_F_BFu0s  {
  unsigned short v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Us_F_BFu0s) C1{ Fs Fi Fs:0}



static void Test_Us_F_BFu0s()
{
  {
    init_simple_test("Us_F_BFu0s");
    static STRUCT_IF_C Us_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Us_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_F_BFu0s, Us_F_BFu0s)
//============================================================================


struct  Us_I_BFu0c  {
  unsigned short v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Us_I_BFu0c) C1{ Fs Fi Fc:0}



static void Test_Us_I_BFu0c()
{
  {
    init_simple_test("Us_I_BFu0c");
    static STRUCT_IF_C Us_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_I_BFu0c, Us_I_BFu0c)
//============================================================================


struct  Us_I_BFu0i  {
  unsigned short v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Us_I_BFu0i) C1{ Fs Fi Fi:0}



static void Test_Us_I_BFu0i()
{
  {
    init_simple_test("Us_I_BFu0i");
    static STRUCT_IF_C Us_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_I_BFu0i, Us_I_BFu0i)
//============================================================================


struct  Us_I_BFu0ll  {
  unsigned short v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Us_I_BFu0ll) C1{ Fs Fi FL:0}



static void Test_Us_I_BFu0ll()
{
  {
    init_simple_test("Us_I_BFu0ll");
    static STRUCT_IF_C Us_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_I_BFu0ll, Us_I_BFu0ll)
//============================================================================


struct  Us_I_BFu0s  {
  unsigned short v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Us_I_BFu0s) C1{ Fs Fi Fs:0}



static void Test_Us_I_BFu0s()
{
  {
    init_simple_test("Us_I_BFu0s");
    static STRUCT_IF_C Us_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Us_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_I_BFu0s, Us_I_BFu0s)
//============================================================================


struct  Us_Ip_BFu0c  {
  unsigned short v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Us_Ip_BFu0c) C1{ Fs Fp Fc:0}



static void Test_Us_Ip_BFu0c()
{
  {
    init_simple_test("Us_Ip_BFu0c");
    static STRUCT_IF_C Us_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ip_BFu0c, Us_Ip_BFu0c)
//============================================================================


struct  Us_Ip_BFu0i  {
  unsigned short v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Us_Ip_BFu0i) C1{ Fs Fp Fi:0}



static void Test_Us_Ip_BFu0i()
{
  {
    init_simple_test("Us_Ip_BFu0i");
    static STRUCT_IF_C Us_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ip_BFu0i, Us_Ip_BFu0i)
//============================================================================


struct  Us_Ip_BFu0ll  {
  unsigned short v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Us_Ip_BFu0ll) C1{ Fs Fp FL:0}



static void Test_Us_Ip_BFu0ll()
{
  {
    init_simple_test("Us_Ip_BFu0ll");
    static STRUCT_IF_C Us_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ip_BFu0ll, Us_Ip_BFu0ll)
//============================================================================


struct  Us_Ip_BFu0s  {
  unsigned short v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Us_Ip_BFu0s) C1{ Fs Fp Fs:0}



static void Test_Us_Ip_BFu0s()
{
  {
    init_simple_test("Us_Ip_BFu0s");
    static STRUCT_IF_C Us_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ip_BFu0s, Us_Ip_BFu0s)
//============================================================================


struct  Us_L_BFu0c  {
  unsigned short v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Us_L_BFu0c) C1{ Fs FL Fc:0}



static void Test_Us_L_BFu0c()
{
  {
    init_simple_test("Us_L_BFu0c");
    static STRUCT_IF_C Us_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_L_BFu0c, Us_L_BFu0c)
//============================================================================


struct  Us_L_BFu0i  {
  unsigned short v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Us_L_BFu0i) C1{ Fs FL Fi:0}



static void Test_Us_L_BFu0i()
{
  {
    init_simple_test("Us_L_BFu0i");
    static STRUCT_IF_C Us_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_L_BFu0i, Us_L_BFu0i)
//============================================================================


struct  Us_L_BFu0ll  {
  unsigned short v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Us_L_BFu0ll) C1{ Fs FL FL:0}



static void Test_Us_L_BFu0ll()
{
  {
    init_simple_test("Us_L_BFu0ll");
    static STRUCT_IF_C Us_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_L_BFu0ll, Us_L_BFu0ll)
//============================================================================


struct  Us_L_BFu0s  {
  unsigned short v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Us_L_BFu0s) C1{ Fs FL Fs:0}



static void Test_Us_L_BFu0s()
{
  {
    init_simple_test("Us_L_BFu0s");
    static STRUCT_IF_C Us_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_L_BFu0s, Us_L_BFu0s)
//============================================================================


struct  Us_S_BFu0c  {
  unsigned short v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Us_S_BFu0c) C1{ Fs[2] Fc:0}



static void Test_Us_S_BFu0c()
{
  {
    init_simple_test("Us_S_BFu0c");
    static STRUCT_IF_C Us_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_S_BFu0c, Us_S_BFu0c)
//============================================================================


struct  Us_S_BFu0i  {
  unsigned short v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Us_S_BFu0i) C1{ Fs[2] Fi:0}



static void Test_Us_S_BFu0i()
{
  {
    init_simple_test("Us_S_BFu0i");
    static STRUCT_IF_C Us_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_S_BFu0i, Us_S_BFu0i)
//============================================================================


struct  Us_S_BFu0ll  {
  unsigned short v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Us_S_BFu0ll) C1{ Fs[2] FL:0}



static void Test_Us_S_BFu0ll()
{
  {
    init_simple_test("Us_S_BFu0ll");
    static STRUCT_IF_C Us_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_S_BFu0ll, Us_S_BFu0ll)
//============================================================================


struct  Us_S_BFu0s  {
  unsigned short v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Us_S_BFu0s) C1{ Fs[2] Fs:0}



static void Test_Us_S_BFu0s()
{
  {
    init_simple_test("Us_S_BFu0s");
    static STRUCT_IF_C Us_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_S_BFu0s, Us_S_BFu0s)
//============================================================================


struct  Us_Uc_BFu0c  {
  unsigned short v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Us_Uc_BFu0c) C1{ Fs Fc Fc:0}



static void Test_Us_Uc_BFu0c()
{
  {
    init_simple_test("Us_Uc_BFu0c");
    static STRUCT_IF_C Us_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Uc_BFu0c, Us_Uc_BFu0c)
//============================================================================


struct  Us_Uc_BFu0i  {
  unsigned short v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Us_Uc_BFu0i) C1{ Fs Fc Fi:0}



static void Test_Us_Uc_BFu0i()
{
  {
    init_simple_test("Us_Uc_BFu0i");
    static STRUCT_IF_C Us_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Uc_BFu0i, Us_Uc_BFu0i)
//============================================================================


struct  Us_Uc_BFu0ll  {
  unsigned short v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Us_Uc_BFu0ll) C1{ Fs Fc FL:0}



static void Test_Us_Uc_BFu0ll()
{
  {
    init_simple_test("Us_Uc_BFu0ll");
    static STRUCT_IF_C Us_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Uc_BFu0ll, Us_Uc_BFu0ll)
//============================================================================


struct  Us_Uc_BFu0s  {
  unsigned short v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Us_Uc_BFu0s) C1{ Fs Fc Fs:0}



static void Test_Us_Uc_BFu0s()
{
  {
    init_simple_test("Us_Uc_BFu0s");
    static STRUCT_IF_C Us_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Uc_BFu0s, Us_Uc_BFu0s)
//============================================================================


struct  Us_Ui_BFu0c  {
  unsigned short v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Us_Ui_BFu0c) C1{ Fs Fi Fc:0}



static void Test_Us_Ui_BFu0c()
{
  {
    init_simple_test("Us_Ui_BFu0c");
    static STRUCT_IF_C Us_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ui_BFu0c, Us_Ui_BFu0c)
//============================================================================


struct  Us_Ui_BFu0i  {
  unsigned short v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Us_Ui_BFu0i) C1{ Fs Fi Fi:0}



static void Test_Us_Ui_BFu0i()
{
  {
    init_simple_test("Us_Ui_BFu0i");
    static STRUCT_IF_C Us_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ui_BFu0i, Us_Ui_BFu0i)
//============================================================================


struct  Us_Ui_BFu0ll  {
  unsigned short v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Us_Ui_BFu0ll) C1{ Fs Fi FL:0}



static void Test_Us_Ui_BFu0ll()
{
  {
    init_simple_test("Us_Ui_BFu0ll");
    static STRUCT_IF_C Us_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(Us_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ui_BFu0ll, Us_Ui_BFu0ll)
//============================================================================


struct  Us_Ui_BFu0s  {
  unsigned short v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Us_Ui_BFu0s) C1{ Fs Fi Fs:0}



static void Test_Us_Ui_BFu0s()
{
  {
    init_simple_test("Us_Ui_BFu0s");
    static STRUCT_IF_C Us_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(Us_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(Us_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "Us_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ui_BFu0s, Us_Ui_BFu0s)
//============================================================================


struct  Us_Ul_BFu0c  {
  unsigned short v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Us_Ul_BFu0c) C1{ Fs FL Fc:0}



static void Test_Us_Ul_BFu0c()
{
  {
    init_simple_test("Us_Ul_BFu0c");
    static STRUCT_IF_C Us_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ul_BFu0c, Us_Ul_BFu0c)
//============================================================================


struct  Us_Ul_BFu0i  {
  unsigned short v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Us_Ul_BFu0i) C1{ Fs FL Fi:0}



static void Test_Us_Ul_BFu0i()
{
  {
    init_simple_test("Us_Ul_BFu0i");
    static STRUCT_IF_C Us_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ul_BFu0i, Us_Ul_BFu0i)
//============================================================================


struct  Us_Ul_BFu0ll  {
  unsigned short v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Us_Ul_BFu0ll) C1{ Fs FL FL:0}



static void Test_Us_Ul_BFu0ll()
{
  {
    init_simple_test("Us_Ul_BFu0ll");
    static STRUCT_IF_C Us_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ul_BFu0ll, Us_Ul_BFu0ll)
//============================================================================


struct  Us_Ul_BFu0s  {
  unsigned short v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Us_Ul_BFu0s) C1{ Fs FL Fs:0}



static void Test_Us_Ul_BFu0s()
{
  {
    init_simple_test("Us_Ul_BFu0s");
    static STRUCT_IF_C Us_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Us_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Ul_BFu0s, Us_Ul_BFu0s)
//============================================================================


struct  Us_Us_BFu0c  {
  unsigned short v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Us_Us_BFu0c) C1{ Fs[2] Fc:0}



static void Test_Us_Us_BFu0c()
{
  {
    init_simple_test("Us_Us_BFu0c");
    static STRUCT_IF_C Us_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Us_BFu0c, Us_Us_BFu0c)
//============================================================================


struct  Us_Us_BFu0i  {
  unsigned short v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Us_Us_BFu0i) C1{ Fs[2] Fi:0}



static void Test_Us_Us_BFu0i()
{
  {
    init_simple_test("Us_Us_BFu0i");
    static STRUCT_IF_C Us_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Us_BFu0i, Us_Us_BFu0i)
//============================================================================


struct  Us_Us_BFu0ll  {
  unsigned short v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Us_Us_BFu0ll) C1{ Fs[2] FL:0}



static void Test_Us_Us_BFu0ll()
{
  {
    init_simple_test("Us_Us_BFu0ll");
    static STRUCT_IF_C Us_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Us_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(Us_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Us_BFu0ll, Us_Us_BFu0ll)
//============================================================================


struct  Us_Us_BFu0s  {
  unsigned short v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Us_Us_BFu0s) C1{ Fs[2] Fs:0}



static void Test_Us_Us_BFu0s()
{
  {
    init_simple_test("Us_Us_BFu0s");
    static STRUCT_IF_C Us_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(Us_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(Us_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "Us_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Us_BFu0s, Us_Us_BFu0s)
//============================================================================


struct  Us_Vp_BFu0c  {
  unsigned short v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Us_Vp_BFu0c) C1{ Fs Fp Fc:0}



static void Test_Us_Vp_BFu0c()
{
  {
    init_simple_test("Us_Vp_BFu0c");
    static STRUCT_IF_C Us_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Vp_BFu0c, Us_Vp_BFu0c)
//============================================================================


struct  Us_Vp_BFu0i  {
  unsigned short v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Us_Vp_BFu0i) C1{ Fs Fp Fi:0}



static void Test_Us_Vp_BFu0i()
{
  {
    init_simple_test("Us_Vp_BFu0i");
    static STRUCT_IF_C Us_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Vp_BFu0i, Us_Vp_BFu0i)
//============================================================================


struct  Us_Vp_BFu0ll  {
  unsigned short v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Us_Vp_BFu0ll) C1{ Fs Fp FL:0}



static void Test_Us_Vp_BFu0ll()
{
  {
    init_simple_test("Us_Vp_BFu0ll");
    static STRUCT_IF_C Us_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Vp_BFu0ll, Us_Vp_BFu0ll)
//============================================================================


struct  Us_Vp_BFu0s  {
  unsigned short v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Us_Vp_BFu0s) C1{ Fs Fp Fs:0}



static void Test_Us_Vp_BFu0s()
{
  {
    init_simple_test("Us_Vp_BFu0s");
    static STRUCT_IF_C Us_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Us_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Us_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Us_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Us_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Us_Vp_BFu0s, Us_Vp_BFu0s)
//============================================================================


struct  Vp_BFu0c  {
  void *v1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0c) C1{ Fp Fc:0}



static void Test_Vp_BFu0c()
{
  {
    init_simple_test("Vp_BFu0c");
    static STRUCT_IF_C Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c, Vp_BFu0c)
//============================================================================


struct  Vp_BFu0c_BFu0c  {
  void *v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0c_BFu0c) C1{ Fp Fc:0 Fc:0}



static void Test_Vp_BFu0c_BFu0c()
{
  {
    init_simple_test("Vp_BFu0c_BFu0c");
    static STRUCT_IF_C Vp_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu0c, Vp_BFu0c_BFu0c)
//============================================================================


struct  Vp_BFu0c_BFu0i  {
  void *v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0c_BFu0i) C1{ Fp Fc:0 Fi:0}



static void Test_Vp_BFu0c_BFu0i()
{
  {
    init_simple_test("Vp_BFu0c_BFu0i");
    static STRUCT_IF_C Vp_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu0i, Vp_BFu0c_BFu0i)
//============================================================================


struct  Vp_BFu0c_BFu0ll  {
  void *v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0c_BFu0ll) C1{ Fp Fc:0 FL:0}



static void Test_Vp_BFu0c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu0ll");
    static STRUCT_IF_C Vp_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu0ll, Vp_BFu0c_BFu0ll)
//============================================================================


struct  Vp_BFu0c_BFu0s  {
  void *v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0c_BFu0s) C1{ Fp Fc:0 Fs:0}



static void Test_Vp_BFu0c_BFu0s()
{
  {
    init_simple_test("Vp_BFu0c_BFu0s");
    static STRUCT_IF_C Vp_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu0s, Vp_BFu0c_BFu0s)
//============================================================================


struct  Vp_BFu0c_BFu15i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0c_BFu15i) C1{ Fp Fc:0 Fi:15}



static void Test_Vp_BFu0c_BFu15i()
{
  {
    init_simple_test("Vp_BFu0c_BFu15i");
    static STRUCT_IF_C Vp_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu15i, Vp_BFu0c_BFu15i)
//============================================================================


struct  Vp_BFu0c_BFu15ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0c_BFu15ll) C1{ Fp Fc:0 FL:15}



static void Test_Vp_BFu0c_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu15ll");
    static STRUCT_IF_C Vp_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu15ll, Vp_BFu0c_BFu15ll)
//============================================================================


struct  Vp_BFu0c_BFu15s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0c_BFu15s) C1{ Fp Fc:0 Fs:15}



static void Test_Vp_BFu0c_BFu15s()
{
  {
    init_simple_test("Vp_BFu0c_BFu15s");
    static STRUCT_IF_C Vp_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu15s, Vp_BFu0c_BFu15s)
//============================================================================


struct  Vp_BFu0c_BFu16i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0c_BFu16i) C1{ Fp Fc:0 Fi:16}



static void Test_Vp_BFu0c_BFu16i()
{
  {
    init_simple_test("Vp_BFu0c_BFu16i");
    static STRUCT_IF_C Vp_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu16i, Vp_BFu0c_BFu16i)
//============================================================================


struct  Vp_BFu0c_BFu16ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0c_BFu16ll) C1{ Fp Fc:0 FL:16}



static void Test_Vp_BFu0c_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu16ll");
    static STRUCT_IF_C Vp_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu16ll, Vp_BFu0c_BFu16ll)
//============================================================================


struct  Vp_BFu0c_BFu16s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0c_BFu16s) C1{ Fp Fc:0 Fs:16}



static void Test_Vp_BFu0c_BFu16s()
{
  {
    init_simple_test("Vp_BFu0c_BFu16s");
    static STRUCT_IF_C Vp_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu16s, Vp_BFu0c_BFu16s)
//============================================================================


struct  Vp_BFu0c_BFu17i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0c_BFu17i) C1{ Fp Fc:0 Fi:17}



static void Test_Vp_BFu0c_BFu17i()
{
  {
    init_simple_test("Vp_BFu0c_BFu17i");
    static STRUCT_IF_C Vp_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu17i, Vp_BFu0c_BFu17i)
//============================================================================


struct  Vp_BFu0c_BFu17ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0c_BFu17ll) C1{ Fp Fc:0 FL:17}



static void Test_Vp_BFu0c_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu17ll");
    static STRUCT_IF_C Vp_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu17ll, Vp_BFu0c_BFu17ll)
//============================================================================


struct  Vp_BFu0c_BFu1c  {
  void *v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0c_BFu1c) C1{ Fp Fc:0 Fc:1}



static void Test_Vp_BFu0c_BFu1c()
{
  {
    init_simple_test("Vp_BFu0c_BFu1c");
    static STRUCT_IF_C Vp_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu1c, Vp_BFu0c_BFu1c)
//============================================================================


struct  Vp_BFu0c_BFu1i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0c_BFu1i) C1{ Fp Fc:0 Fi:1}



static void Test_Vp_BFu0c_BFu1i()
{
  {
    init_simple_test("Vp_BFu0c_BFu1i");
    static STRUCT_IF_C Vp_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu1i, Vp_BFu0c_BFu1i)
//============================================================================


struct  Vp_BFu0c_BFu1ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0c_BFu1ll) C1{ Fp Fc:0 FL:1}



static void Test_Vp_BFu0c_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu1ll");
    static STRUCT_IF_C Vp_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu1ll, Vp_BFu0c_BFu1ll)
//============================================================================


struct  Vp_BFu0c_BFu1s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0c_BFu1s) C1{ Fp Fc:0 Fs:1}



static void Test_Vp_BFu0c_BFu1s()
{
  {
    init_simple_test("Vp_BFu0c_BFu1s");
    static STRUCT_IF_C Vp_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu1s, Vp_BFu0c_BFu1s)
//============================================================================


struct  Vp_BFu0c_BFu31i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0c_BFu31i) C1{ Fp Fc:0 Fi:31}



static void Test_Vp_BFu0c_BFu31i()
{
  {
    init_simple_test("Vp_BFu0c_BFu31i");
    static STRUCT_IF_C Vp_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu31i, Vp_BFu0c_BFu31i)
//============================================================================


struct  Vp_BFu0c_BFu31ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0c_BFu31ll) C1{ Fp Fc:0 FL:31}



static void Test_Vp_BFu0c_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu31ll");
    static STRUCT_IF_C Vp_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu31ll, Vp_BFu0c_BFu31ll)
//============================================================================


struct  Vp_BFu0c_BFu32i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0c_BFu32i) C1{ Fp Fc:0 Fi:32}



static void Test_Vp_BFu0c_BFu32i()
{
  {
    init_simple_test("Vp_BFu0c_BFu32i");
    static STRUCT_IF_C Vp_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu32i, Vp_BFu0c_BFu32i)
//============================================================================


struct  Vp_BFu0c_BFu32ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0c_BFu32ll) C1{ Fp Fc:0 FL:32}



static void Test_Vp_BFu0c_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu32ll");
    static STRUCT_IF_C Vp_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu32ll, Vp_BFu0c_BFu32ll)
//============================================================================


struct  Vp_BFu0c_BFu33  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0c_BFu33) C1{ Fp Fc:0 FL:33}



static void Test_Vp_BFu0c_BFu33()
{
  {
    init_simple_test("Vp_BFu0c_BFu33");
    static STRUCT_IF_C Vp_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu33, Vp_BFu0c_BFu33)
//============================================================================


struct  Vp_BFu0c_BFu7c  {
  void *v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0c_BFu7c) C1{ Fp Fc:0 Fc:7}



static void Test_Vp_BFu0c_BFu7c()
{
  {
    init_simple_test("Vp_BFu0c_BFu7c");
    static STRUCT_IF_C Vp_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu7c, Vp_BFu0c_BFu7c)
//============================================================================


struct  Vp_BFu0c_BFu7i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0c_BFu7i) C1{ Fp Fc:0 Fi:7}



static void Test_Vp_BFu0c_BFu7i()
{
  {
    init_simple_test("Vp_BFu0c_BFu7i");
    static STRUCT_IF_C Vp_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu7i, Vp_BFu0c_BFu7i)
//============================================================================


struct  Vp_BFu0c_BFu7ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0c_BFu7ll) C1{ Fp Fc:0 FL:7}



static void Test_Vp_BFu0c_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu7ll");
    static STRUCT_IF_C Vp_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu7ll, Vp_BFu0c_BFu7ll)
//============================================================================


struct  Vp_BFu0c_BFu7s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0c_BFu7s) C1{ Fp Fc:0 Fs:7}



static void Test_Vp_BFu0c_BFu7s()
{
  {
    init_simple_test("Vp_BFu0c_BFu7s");
    static STRUCT_IF_C Vp_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu7s, Vp_BFu0c_BFu7s)
//============================================================================


struct  Vp_BFu0c_BFu8c  {
  void *v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0c_BFu8c) C1{ Fp Fc:0 Fc:8}



static void Test_Vp_BFu0c_BFu8c()
{
  {
    init_simple_test("Vp_BFu0c_BFu8c");
    static STRUCT_IF_C Vp_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu8c, Vp_BFu0c_BFu8c)
//============================================================================


struct  Vp_BFu0c_BFu8i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0c_BFu8i) C1{ Fp Fc:0 Fi:8}



static void Test_Vp_BFu0c_BFu8i()
{
  {
    init_simple_test("Vp_BFu0c_BFu8i");
    static STRUCT_IF_C Vp_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu8i, Vp_BFu0c_BFu8i)
//============================================================================


struct  Vp_BFu0c_BFu8ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0c_BFu8ll) C1{ Fp Fc:0 FL:8}



static void Test_Vp_BFu0c_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu8ll");
    static STRUCT_IF_C Vp_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu8ll, Vp_BFu0c_BFu8ll)
//============================================================================


struct  Vp_BFu0c_BFu8s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0c_BFu8s) C1{ Fp Fc:0 Fs:8}



static void Test_Vp_BFu0c_BFu8s()
{
  {
    init_simple_test("Vp_BFu0c_BFu8s");
    static STRUCT_IF_C Vp_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu8s, Vp_BFu0c_BFu8s)
//============================================================================


struct  Vp_BFu0c_BFu9i  {
  void *v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0c_BFu9i) C1{ Fp Fc:0 Fi:9}



static void Test_Vp_BFu0c_BFu9i()
{
  {
    init_simple_test("Vp_BFu0c_BFu9i");
    static STRUCT_IF_C Vp_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu9i, Vp_BFu0c_BFu9i)
//============================================================================


struct  Vp_BFu0c_BFu9ll  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0c_BFu9ll) C1{ Fp Fc:0 FL:9}



static void Test_Vp_BFu0c_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0c_BFu9ll");
    static STRUCT_IF_C Vp_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu9ll, Vp_BFu0c_BFu9ll)
//============================================================================


struct  Vp_BFu0c_BFu9s  {
  void *v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0c_BFu9s) C1{ Fp Fc:0 Fs:9}



static void Test_Vp_BFu0c_BFu9s()
{
  {
    init_simple_test("Vp_BFu0c_BFu9s");
    static STRUCT_IF_C Vp_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_BFu9s, Vp_BFu0c_BFu9s)
//============================================================================


struct  Vp_BFu0c_C  {
  void *v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Vp_BFu0c_C) C1{ Fp Fc:0 Fc}



static void Test_Vp_BFu0c_C()
{
  {
    init_simple_test("Vp_BFu0c_C");
    static STRUCT_IF_C Vp_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_C, Vp_BFu0c_C)
//============================================================================


struct  Vp_BFu0c_D  {
  void *v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Vp_BFu0c_D) C1{ Fp Fc:0 FL}



static void Test_Vp_BFu0c_D()
{
  {
    init_simple_test("Vp_BFu0c_D");
    static STRUCT_IF_C Vp_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_D, Vp_BFu0c_D)
//============================================================================


struct  Vp_BFu0c_F  {
  void *v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Vp_BFu0c_F) C1{ Fp Fc:0 Fi}



static void Test_Vp_BFu0c_F()
{
  {
    init_simple_test("Vp_BFu0c_F");
    static STRUCT_IF_C Vp_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_F, Vp_BFu0c_F)
//============================================================================


struct  Vp_BFu0c_I  {
  void *v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Vp_BFu0c_I) C1{ Fp Fc:0 Fi}



static void Test_Vp_BFu0c_I()
{
  {
    init_simple_test("Vp_BFu0c_I");
    static STRUCT_IF_C Vp_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_I, Vp_BFu0c_I)
//============================================================================


struct  Vp_BFu0c_Ip  {
  void *v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Vp_BFu0c_Ip) C1{ Fp Fc:0 Fp}



static void Test_Vp_BFu0c_Ip()
{
  {
    init_simple_test("Vp_BFu0c_Ip");
    static STRUCT_IF_C Vp_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_Ip, Vp_BFu0c_Ip)
//============================================================================


struct  Vp_BFu0c_L  {
  void *v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0c_L) C1{ Fp Fc:0 FL}



static void Test_Vp_BFu0c_L()
{
  {
    init_simple_test("Vp_BFu0c_L");
    static STRUCT_IF_C Vp_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_L, Vp_BFu0c_L)
//============================================================================


struct  Vp_BFu0c_S  {
  void *v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Vp_BFu0c_S) C1{ Fp Fc:0 Fs}



static void Test_Vp_BFu0c_S()
{
  {
    init_simple_test("Vp_BFu0c_S");
    static STRUCT_IF_C Vp_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_S, Vp_BFu0c_S)
//============================================================================


struct  Vp_BFu0c_Uc  {
  void *v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0c_Uc) C1{ Fp Fc:0 Fc}



static void Test_Vp_BFu0c_Uc()
{
  {
    init_simple_test("Vp_BFu0c_Uc");
    static STRUCT_IF_C Vp_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_Uc, Vp_BFu0c_Uc)
//============================================================================


struct  Vp_BFu0c_Ui  {
  void *v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0c_Ui) C1{ Fp Fc:0 Fi}



static void Test_Vp_BFu0c_Ui()
{
  {
    init_simple_test("Vp_BFu0c_Ui");
    static STRUCT_IF_C Vp_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_Ui, Vp_BFu0c_Ui)
//============================================================================


struct  Vp_BFu0c_Ul  {
  void *v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0c_Ul) C1{ Fp Fc:0 FL}



static void Test_Vp_BFu0c_Ul()
{
  {
    init_simple_test("Vp_BFu0c_Ul");
    static STRUCT_IF_C Vp_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_Ul, Vp_BFu0c_Ul)
//============================================================================


struct  Vp_BFu0c_Us  {
  void *v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0c_Us) C1{ Fp Fc:0 Fs}



static void Test_Vp_BFu0c_Us()
{
  {
    init_simple_test("Vp_BFu0c_Us");
    static STRUCT_IF_C Vp_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_Us, Vp_BFu0c_Us)
//============================================================================


struct  Vp_BFu0c_Vp  {
  void *v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Vp_BFu0c_Vp) C1{ Fp Fc:0 Fp}



static void Test_Vp_BFu0c_Vp()
{
  {
    init_simple_test("Vp_BFu0c_Vp");
    static STRUCT_IF_C Vp_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0c_Vp, Vp_BFu0c_Vp)
//============================================================================


struct  Vp_BFu0i  {
  void *v1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0i) C1{ Fp Fi:0}



static void Test_Vp_BFu0i()
{
  {
    init_simple_test("Vp_BFu0i");
    static STRUCT_IF_C Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i, Vp_BFu0i)
//============================================================================


struct  Vp_BFu0i_BFu0c  {
  void *v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0i_BFu0c) C1{ Fp Fi:0 Fc:0}



static void Test_Vp_BFu0i_BFu0c()
{
  {
    init_simple_test("Vp_BFu0i_BFu0c");
    static STRUCT_IF_C Vp_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu0c, Vp_BFu0i_BFu0c)
//============================================================================


struct  Vp_BFu0i_BFu0i  {
  void *v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0i_BFu0i) C1{ Fp Fi:0 Fi:0}



static void Test_Vp_BFu0i_BFu0i()
{
  {
    init_simple_test("Vp_BFu0i_BFu0i");
    static STRUCT_IF_C Vp_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu0i, Vp_BFu0i_BFu0i)
//============================================================================


struct  Vp_BFu0i_BFu0ll  {
  void *v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0i_BFu0ll) C1{ Fp Fi:0 FL:0}



static void Test_Vp_BFu0i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu0ll");
    static STRUCT_IF_C Vp_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu0ll, Vp_BFu0i_BFu0ll)
//============================================================================


struct  Vp_BFu0i_BFu0s  {
  void *v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0i_BFu0s) C1{ Fp Fi:0 Fs:0}



static void Test_Vp_BFu0i_BFu0s()
{
  {
    init_simple_test("Vp_BFu0i_BFu0s");
    static STRUCT_IF_C Vp_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu0s, Vp_BFu0i_BFu0s)
//============================================================================


struct  Vp_BFu0i_BFu15i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0i_BFu15i) C1{ Fp Fi:0 Fi:15}



static void Test_Vp_BFu0i_BFu15i()
{
  {
    init_simple_test("Vp_BFu0i_BFu15i");
    static STRUCT_IF_C Vp_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu15i, Vp_BFu0i_BFu15i)
//============================================================================


struct  Vp_BFu0i_BFu15ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0i_BFu15ll) C1{ Fp Fi:0 FL:15}



static void Test_Vp_BFu0i_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu15ll");
    static STRUCT_IF_C Vp_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu15ll, Vp_BFu0i_BFu15ll)
//============================================================================


struct  Vp_BFu0i_BFu15s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0i_BFu15s) C1{ Fp Fi:0 Fs:15}



static void Test_Vp_BFu0i_BFu15s()
{
  {
    init_simple_test("Vp_BFu0i_BFu15s");
    static STRUCT_IF_C Vp_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu15s, Vp_BFu0i_BFu15s)
//============================================================================


struct  Vp_BFu0i_BFu16i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0i_BFu16i) C1{ Fp Fi:0 Fi:16}



static void Test_Vp_BFu0i_BFu16i()
{
  {
    init_simple_test("Vp_BFu0i_BFu16i");
    static STRUCT_IF_C Vp_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu16i, Vp_BFu0i_BFu16i)
//============================================================================


struct  Vp_BFu0i_BFu16ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0i_BFu16ll) C1{ Fp Fi:0 FL:16}



static void Test_Vp_BFu0i_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu16ll");
    static STRUCT_IF_C Vp_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu16ll, Vp_BFu0i_BFu16ll)
//============================================================================


struct  Vp_BFu0i_BFu16s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0i_BFu16s) C1{ Fp Fi:0 Fs:16}



static void Test_Vp_BFu0i_BFu16s()
{
  {
    init_simple_test("Vp_BFu0i_BFu16s");
    static STRUCT_IF_C Vp_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu16s, Vp_BFu0i_BFu16s)
//============================================================================


struct  Vp_BFu0i_BFu17i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0i_BFu17i) C1{ Fp Fi:0 Fi:17}



static void Test_Vp_BFu0i_BFu17i()
{
  {
    init_simple_test("Vp_BFu0i_BFu17i");
    static STRUCT_IF_C Vp_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu17i, Vp_BFu0i_BFu17i)
//============================================================================


struct  Vp_BFu0i_BFu17ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0i_BFu17ll) C1{ Fp Fi:0 FL:17}



static void Test_Vp_BFu0i_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu17ll");
    static STRUCT_IF_C Vp_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu17ll, Vp_BFu0i_BFu17ll)
//============================================================================


struct  Vp_BFu0i_BFu1c  {
  void *v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0i_BFu1c) C1{ Fp Fi:0 Fc:1}



static void Test_Vp_BFu0i_BFu1c()
{
  {
    init_simple_test("Vp_BFu0i_BFu1c");
    static STRUCT_IF_C Vp_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu1c, Vp_BFu0i_BFu1c)
//============================================================================


struct  Vp_BFu0i_BFu1i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0i_BFu1i) C1{ Fp Fi:0 Fi:1}



static void Test_Vp_BFu0i_BFu1i()
{
  {
    init_simple_test("Vp_BFu0i_BFu1i");
    static STRUCT_IF_C Vp_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu1i, Vp_BFu0i_BFu1i)
//============================================================================


struct  Vp_BFu0i_BFu1ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0i_BFu1ll) C1{ Fp Fi:0 FL:1}



static void Test_Vp_BFu0i_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu1ll");
    static STRUCT_IF_C Vp_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu1ll, Vp_BFu0i_BFu1ll)
//============================================================================


struct  Vp_BFu0i_BFu1s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0i_BFu1s) C1{ Fp Fi:0 Fs:1}



static void Test_Vp_BFu0i_BFu1s()
{
  {
    init_simple_test("Vp_BFu0i_BFu1s");
    static STRUCT_IF_C Vp_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu1s, Vp_BFu0i_BFu1s)
//============================================================================


struct  Vp_BFu0i_BFu31i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0i_BFu31i) C1{ Fp Fi:0 Fi:31}



static void Test_Vp_BFu0i_BFu31i()
{
  {
    init_simple_test("Vp_BFu0i_BFu31i");
    static STRUCT_IF_C Vp_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu31i, Vp_BFu0i_BFu31i)
//============================================================================


struct  Vp_BFu0i_BFu31ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0i_BFu31ll) C1{ Fp Fi:0 FL:31}



static void Test_Vp_BFu0i_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu31ll");
    static STRUCT_IF_C Vp_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu31ll, Vp_BFu0i_BFu31ll)
//============================================================================


struct  Vp_BFu0i_BFu32i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0i_BFu32i) C1{ Fp Fi:0 Fi:32}



static void Test_Vp_BFu0i_BFu32i()
{
  {
    init_simple_test("Vp_BFu0i_BFu32i");
    static STRUCT_IF_C Vp_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu32i, Vp_BFu0i_BFu32i)
//============================================================================


struct  Vp_BFu0i_BFu32ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0i_BFu32ll) C1{ Fp Fi:0 FL:32}



static void Test_Vp_BFu0i_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu32ll");
    static STRUCT_IF_C Vp_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu32ll, Vp_BFu0i_BFu32ll)
//============================================================================


struct  Vp_BFu0i_BFu33  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0i_BFu33) C1{ Fp Fi:0 FL:33}



static void Test_Vp_BFu0i_BFu33()
{
  {
    init_simple_test("Vp_BFu0i_BFu33");
    static STRUCT_IF_C Vp_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu33, Vp_BFu0i_BFu33)
//============================================================================


struct  Vp_BFu0i_BFu7c  {
  void *v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0i_BFu7c) C1{ Fp Fi:0 Fc:7}



static void Test_Vp_BFu0i_BFu7c()
{
  {
    init_simple_test("Vp_BFu0i_BFu7c");
    static STRUCT_IF_C Vp_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu7c, Vp_BFu0i_BFu7c)
//============================================================================


struct  Vp_BFu0i_BFu7i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0i_BFu7i) C1{ Fp Fi:0 Fi:7}



static void Test_Vp_BFu0i_BFu7i()
{
  {
    init_simple_test("Vp_BFu0i_BFu7i");
    static STRUCT_IF_C Vp_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu7i, Vp_BFu0i_BFu7i)
//============================================================================


struct  Vp_BFu0i_BFu7ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0i_BFu7ll) C1{ Fp Fi:0 FL:7}



static void Test_Vp_BFu0i_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu7ll");
    static STRUCT_IF_C Vp_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu7ll, Vp_BFu0i_BFu7ll)
//============================================================================


struct  Vp_BFu0i_BFu7s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0i_BFu7s) C1{ Fp Fi:0 Fs:7}



static void Test_Vp_BFu0i_BFu7s()
{
  {
    init_simple_test("Vp_BFu0i_BFu7s");
    static STRUCT_IF_C Vp_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu7s, Vp_BFu0i_BFu7s)
//============================================================================


struct  Vp_BFu0i_BFu8c  {
  void *v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0i_BFu8c) C1{ Fp Fi:0 Fc:8}



static void Test_Vp_BFu0i_BFu8c()
{
  {
    init_simple_test("Vp_BFu0i_BFu8c");
    static STRUCT_IF_C Vp_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu8c, Vp_BFu0i_BFu8c)
//============================================================================


struct  Vp_BFu0i_BFu8i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0i_BFu8i) C1{ Fp Fi:0 Fi:8}



static void Test_Vp_BFu0i_BFu8i()
{
  {
    init_simple_test("Vp_BFu0i_BFu8i");
    static STRUCT_IF_C Vp_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu8i, Vp_BFu0i_BFu8i)
//============================================================================


struct  Vp_BFu0i_BFu8ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0i_BFu8ll) C1{ Fp Fi:0 FL:8}



static void Test_Vp_BFu0i_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu8ll");
    static STRUCT_IF_C Vp_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu8ll, Vp_BFu0i_BFu8ll)
//============================================================================


struct  Vp_BFu0i_BFu8s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0i_BFu8s) C1{ Fp Fi:0 Fs:8}



static void Test_Vp_BFu0i_BFu8s()
{
  {
    init_simple_test("Vp_BFu0i_BFu8s");
    static STRUCT_IF_C Vp_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu8s, Vp_BFu0i_BFu8s)
//============================================================================


struct  Vp_BFu0i_BFu9i  {
  void *v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0i_BFu9i) C1{ Fp Fi:0 Fi:9}



static void Test_Vp_BFu0i_BFu9i()
{
  {
    init_simple_test("Vp_BFu0i_BFu9i");
    static STRUCT_IF_C Vp_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu9i, Vp_BFu0i_BFu9i)
//============================================================================


struct  Vp_BFu0i_BFu9ll  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0i_BFu9ll) C1{ Fp Fi:0 FL:9}



static void Test_Vp_BFu0i_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0i_BFu9ll");
    static STRUCT_IF_C Vp_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu9ll, Vp_BFu0i_BFu9ll)
//============================================================================


struct  Vp_BFu0i_BFu9s  {
  void *v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0i_BFu9s) C1{ Fp Fi:0 Fs:9}



static void Test_Vp_BFu0i_BFu9s()
{
  {
    init_simple_test("Vp_BFu0i_BFu9s");
    static STRUCT_IF_C Vp_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_BFu9s, Vp_BFu0i_BFu9s)
//============================================================================


struct  Vp_BFu0i_C  {
  void *v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Vp_BFu0i_C) C1{ Fp Fi:0 Fc}



static void Test_Vp_BFu0i_C()
{
  {
    init_simple_test("Vp_BFu0i_C");
    static STRUCT_IF_C Vp_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_C, Vp_BFu0i_C)
//============================================================================


struct  Vp_BFu0i_D  {
  void *v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Vp_BFu0i_D) C1{ Fp Fi:0 FL}



static void Test_Vp_BFu0i_D()
{
  {
    init_simple_test("Vp_BFu0i_D");
    static STRUCT_IF_C Vp_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_D, Vp_BFu0i_D)
//============================================================================


struct  Vp_BFu0i_F  {
  void *v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Vp_BFu0i_F) C1{ Fp Fi:0 Fi}



static void Test_Vp_BFu0i_F()
{
  {
    init_simple_test("Vp_BFu0i_F");
    static STRUCT_IF_C Vp_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_F, Vp_BFu0i_F)
//============================================================================


struct  Vp_BFu0i_I  {
  void *v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Vp_BFu0i_I) C1{ Fp Fi:0 Fi}



static void Test_Vp_BFu0i_I()
{
  {
    init_simple_test("Vp_BFu0i_I");
    static STRUCT_IF_C Vp_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_I, Vp_BFu0i_I)
//============================================================================


struct  Vp_BFu0i_Ip  {
  void *v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Vp_BFu0i_Ip) C1{ Fp Fi:0 Fp}



static void Test_Vp_BFu0i_Ip()
{
  {
    init_simple_test("Vp_BFu0i_Ip");
    static STRUCT_IF_C Vp_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_Ip, Vp_BFu0i_Ip)
//============================================================================


struct  Vp_BFu0i_L  {
  void *v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0i_L) C1{ Fp Fi:0 FL}



static void Test_Vp_BFu0i_L()
{
  {
    init_simple_test("Vp_BFu0i_L");
    static STRUCT_IF_C Vp_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_L, Vp_BFu0i_L)
//============================================================================


struct  Vp_BFu0i_S  {
  void *v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Vp_BFu0i_S) C1{ Fp Fi:0 Fs}



static void Test_Vp_BFu0i_S()
{
  {
    init_simple_test("Vp_BFu0i_S");
    static STRUCT_IF_C Vp_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_S, Vp_BFu0i_S)
//============================================================================


struct  Vp_BFu0i_Uc  {
  void *v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0i_Uc) C1{ Fp Fi:0 Fc}



static void Test_Vp_BFu0i_Uc()
{
  {
    init_simple_test("Vp_BFu0i_Uc");
    static STRUCT_IF_C Vp_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_Uc, Vp_BFu0i_Uc)
//============================================================================


struct  Vp_BFu0i_Ui  {
  void *v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0i_Ui) C1{ Fp Fi:0 Fi}



static void Test_Vp_BFu0i_Ui()
{
  {
    init_simple_test("Vp_BFu0i_Ui");
    static STRUCT_IF_C Vp_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_Ui, Vp_BFu0i_Ui)
//============================================================================


struct  Vp_BFu0i_Ul  {
  void *v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0i_Ul) C1{ Fp Fi:0 FL}



static void Test_Vp_BFu0i_Ul()
{
  {
    init_simple_test("Vp_BFu0i_Ul");
    static STRUCT_IF_C Vp_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_Ul, Vp_BFu0i_Ul)
//============================================================================


struct  Vp_BFu0i_Us  {
  void *v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0i_Us) C1{ Fp Fi:0 Fs}



static void Test_Vp_BFu0i_Us()
{
  {
    init_simple_test("Vp_BFu0i_Us");
    static STRUCT_IF_C Vp_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_Us, Vp_BFu0i_Us)
//============================================================================


struct  Vp_BFu0i_Vp  {
  void *v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Vp_BFu0i_Vp) C1{ Fp Fi:0 Fp}



static void Test_Vp_BFu0i_Vp()
{
  {
    init_simple_test("Vp_BFu0i_Vp");
    static STRUCT_IF_C Vp_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0i_Vp, Vp_BFu0i_Vp)
//============================================================================


struct  Vp_BFu0ll  {
  void *v1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0ll) C1{ Fp FL:0}



static void Test_Vp_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0ll");
    static STRUCT_IF_C Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll, Vp_BFu0ll)
//============================================================================


struct  Vp_BFu0ll_BFu0c  {
  void *v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0ll_BFu0c) C1{ Fp FL:0 Fc:0}



static void Test_Vp_BFu0ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0c");
    static STRUCT_IF_C Vp_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu0c, Vp_BFu0ll_BFu0c)
//============================================================================


struct  Vp_BFu0ll_BFu0i  {
  void *v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0ll_BFu0i) C1{ Fp FL:0 Fi:0}



static void Test_Vp_BFu0ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0i");
    static STRUCT_IF_C Vp_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu0i, Vp_BFu0ll_BFu0i)
//============================================================================


struct  Vp_BFu0ll_BFu0ll  {
  void *v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0ll_BFu0ll) C1{ Fp FL:0 FL:0}



static void Test_Vp_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu0ll, Vp_BFu0ll_BFu0ll)
//============================================================================


struct  Vp_BFu0ll_BFu0s  {
  void *v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0ll_BFu0s) C1{ Fp FL:0 Fs:0}



static void Test_Vp_BFu0ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu0s");
    static STRUCT_IF_C Vp_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu0s, Vp_BFu0ll_BFu0s)
//============================================================================


struct  Vp_BFu0ll_BFu15i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0ll_BFu15i) C1{ Fp FL:0 Fi:15}



static void Test_Vp_BFu0ll_BFu15i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu15i");
    static STRUCT_IF_C Vp_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu15i, Vp_BFu0ll_BFu15i)
//============================================================================


struct  Vp_BFu0ll_BFu15ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0ll_BFu15ll) C1{ Fp FL:0 FL:15}



static void Test_Vp_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu15ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu15ll, Vp_BFu0ll_BFu15ll)
//============================================================================


struct  Vp_BFu0ll_BFu15s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0ll_BFu15s) C1{ Fp FL:0 Fs:15}



static void Test_Vp_BFu0ll_BFu15s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu15s");
    static STRUCT_IF_C Vp_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu15s, Vp_BFu0ll_BFu15s)
//============================================================================


struct  Vp_BFu0ll_BFu16i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0ll_BFu16i) C1{ Fp FL:0 Fi:16}



static void Test_Vp_BFu0ll_BFu16i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu16i");
    static STRUCT_IF_C Vp_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu16i, Vp_BFu0ll_BFu16i)
//============================================================================


struct  Vp_BFu0ll_BFu16ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0ll_BFu16ll) C1{ Fp FL:0 FL:16}



static void Test_Vp_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu16ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu16ll, Vp_BFu0ll_BFu16ll)
//============================================================================


struct  Vp_BFu0ll_BFu16s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0ll_BFu16s) C1{ Fp FL:0 Fs:16}



static void Test_Vp_BFu0ll_BFu16s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu16s");
    static STRUCT_IF_C Vp_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu16s, Vp_BFu0ll_BFu16s)
//============================================================================


struct  Vp_BFu0ll_BFu17i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0ll_BFu17i) C1{ Fp FL:0 Fi:17}



static void Test_Vp_BFu0ll_BFu17i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu17i");
    static STRUCT_IF_C Vp_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu17i, Vp_BFu0ll_BFu17i)
//============================================================================


struct  Vp_BFu0ll_BFu17ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0ll_BFu17ll) C1{ Fp FL:0 FL:17}



static void Test_Vp_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu17ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu17ll, Vp_BFu0ll_BFu17ll)
//============================================================================


struct  Vp_BFu0ll_BFu1c  {
  void *v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1c) C1{ Fp FL:0 Fc:1}



static void Test_Vp_BFu0ll_BFu1c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1c");
    static STRUCT_IF_C Vp_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu1c, Vp_BFu0ll_BFu1c)
//============================================================================


struct  Vp_BFu0ll_BFu1i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1i) C1{ Fp FL:0 Fi:1}



static void Test_Vp_BFu0ll_BFu1i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1i");
    static STRUCT_IF_C Vp_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu1i, Vp_BFu0ll_BFu1i)
//============================================================================


struct  Vp_BFu0ll_BFu1ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1ll) C1{ Fp FL:0 FL:1}



static void Test_Vp_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu1ll, Vp_BFu0ll_BFu1ll)
//============================================================================


struct  Vp_BFu0ll_BFu1s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0ll_BFu1s) C1{ Fp FL:0 Fs:1}



static void Test_Vp_BFu0ll_BFu1s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu1s");
    static STRUCT_IF_C Vp_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu1s, Vp_BFu0ll_BFu1s)
//============================================================================


struct  Vp_BFu0ll_BFu31i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0ll_BFu31i) C1{ Fp FL:0 Fi:31}



static void Test_Vp_BFu0ll_BFu31i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu31i");
    static STRUCT_IF_C Vp_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu31i, Vp_BFu0ll_BFu31i)
//============================================================================


struct  Vp_BFu0ll_BFu31ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0ll_BFu31ll) C1{ Fp FL:0 FL:31}



static void Test_Vp_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu31ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu31ll, Vp_BFu0ll_BFu31ll)
//============================================================================


struct  Vp_BFu0ll_BFu32i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0ll_BFu32i) C1{ Fp FL:0 Fi:32}



static void Test_Vp_BFu0ll_BFu32i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu32i");
    static STRUCT_IF_C Vp_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu32i, Vp_BFu0ll_BFu32i)
//============================================================================


struct  Vp_BFu0ll_BFu32ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0ll_BFu32ll) C1{ Fp FL:0 FL:32}



static void Test_Vp_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu32ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu32ll, Vp_BFu0ll_BFu32ll)
//============================================================================


struct  Vp_BFu0ll_BFu33  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0ll_BFu33) C1{ Fp FL:0 FL:33}



static void Test_Vp_BFu0ll_BFu33()
{
  {
    init_simple_test("Vp_BFu0ll_BFu33");
    static STRUCT_IF_C Vp_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu33, Vp_BFu0ll_BFu33)
//============================================================================


struct  Vp_BFu0ll_BFu7c  {
  void *v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7c) C1{ Fp FL:0 Fc:7}



static void Test_Vp_BFu0ll_BFu7c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7c");
    static STRUCT_IF_C Vp_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu7c, Vp_BFu0ll_BFu7c)
//============================================================================


struct  Vp_BFu0ll_BFu7i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7i) C1{ Fp FL:0 Fi:7}



static void Test_Vp_BFu0ll_BFu7i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7i");
    static STRUCT_IF_C Vp_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu7i, Vp_BFu0ll_BFu7i)
//============================================================================


struct  Vp_BFu0ll_BFu7ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7ll) C1{ Fp FL:0 FL:7}



static void Test_Vp_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu7ll, Vp_BFu0ll_BFu7ll)
//============================================================================


struct  Vp_BFu0ll_BFu7s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0ll_BFu7s) C1{ Fp FL:0 Fs:7}



static void Test_Vp_BFu0ll_BFu7s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu7s");
    static STRUCT_IF_C Vp_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu7s, Vp_BFu0ll_BFu7s)
//============================================================================


struct  Vp_BFu0ll_BFu8c  {
  void *v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8c) C1{ Fp FL:0 Fc:8}



static void Test_Vp_BFu0ll_BFu8c()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8c");
    static STRUCT_IF_C Vp_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu8c, Vp_BFu0ll_BFu8c)
//============================================================================


struct  Vp_BFu0ll_BFu8i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8i) C1{ Fp FL:0 Fi:8}



static void Test_Vp_BFu0ll_BFu8i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8i");
    static STRUCT_IF_C Vp_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu8i, Vp_BFu0ll_BFu8i)
//============================================================================


struct  Vp_BFu0ll_BFu8ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8ll) C1{ Fp FL:0 FL:8}



static void Test_Vp_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu8ll, Vp_BFu0ll_BFu8ll)
//============================================================================


struct  Vp_BFu0ll_BFu8s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0ll_BFu8s) C1{ Fp FL:0 Fs:8}



static void Test_Vp_BFu0ll_BFu8s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu8s");
    static STRUCT_IF_C Vp_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu8s, Vp_BFu0ll_BFu8s)
//============================================================================


struct  Vp_BFu0ll_BFu9i  {
  void *v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0ll_BFu9i) C1{ Fp FL:0 Fi:9}



static void Test_Vp_BFu0ll_BFu9i()
{
  {
    init_simple_test("Vp_BFu0ll_BFu9i");
    static STRUCT_IF_C Vp_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu9i, Vp_BFu0ll_BFu9i)
//============================================================================


struct  Vp_BFu0ll_BFu9ll  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0ll_BFu9ll) C1{ Fp FL:0 FL:9}



static void Test_Vp_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0ll_BFu9ll");
    static STRUCT_IF_C Vp_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu9ll, Vp_BFu0ll_BFu9ll)
//============================================================================


struct  Vp_BFu0ll_BFu9s  {
  void *v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0ll_BFu9s) C1{ Fp FL:0 Fs:9}



static void Test_Vp_BFu0ll_BFu9s()
{
  {
    init_simple_test("Vp_BFu0ll_BFu9s");
    static STRUCT_IF_C Vp_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_BFu9s, Vp_BFu0ll_BFu9s)
//============================================================================


struct  Vp_BFu0ll_C  {
  void *v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Vp_BFu0ll_C) C1{ Fp FL:0 Fc}



static void Test_Vp_BFu0ll_C()
{
  {
    init_simple_test("Vp_BFu0ll_C");
    static STRUCT_IF_C Vp_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_C, Vp_BFu0ll_C)
//============================================================================


struct  Vp_BFu0ll_D  {
  void *v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Vp_BFu0ll_D) C1{ Fp FL:0 FL}



static void Test_Vp_BFu0ll_D()
{
  {
    init_simple_test("Vp_BFu0ll_D");
    static STRUCT_IF_C Vp_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_D, Vp_BFu0ll_D)
//============================================================================


struct  Vp_BFu0ll_F  {
  void *v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Vp_BFu0ll_F) C1{ Fp FL:0 Fi}



static void Test_Vp_BFu0ll_F()
{
  {
    init_simple_test("Vp_BFu0ll_F");
    static STRUCT_IF_C Vp_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_F, Vp_BFu0ll_F)
//============================================================================


struct  Vp_BFu0ll_I  {
  void *v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Vp_BFu0ll_I) C1{ Fp FL:0 Fi}



static void Test_Vp_BFu0ll_I()
{
  {
    init_simple_test("Vp_BFu0ll_I");
    static STRUCT_IF_C Vp_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_I, Vp_BFu0ll_I)
//============================================================================


struct  Vp_BFu0ll_Ip  {
  void *v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Vp_BFu0ll_Ip) C1{ Fp FL:0 Fp}



static void Test_Vp_BFu0ll_Ip()
{
  {
    init_simple_test("Vp_BFu0ll_Ip");
    static STRUCT_IF_C Vp_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_Ip, Vp_BFu0ll_Ip)
//============================================================================


struct  Vp_BFu0ll_L  {
  void *v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0ll_L) C1{ Fp FL:0 FL}



static void Test_Vp_BFu0ll_L()
{
  {
    init_simple_test("Vp_BFu0ll_L");
    static STRUCT_IF_C Vp_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_L, Vp_BFu0ll_L)
//============================================================================


struct  Vp_BFu0ll_S  {
  void *v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Vp_BFu0ll_S) C1{ Fp FL:0 Fs}



static void Test_Vp_BFu0ll_S()
{
  {
    init_simple_test("Vp_BFu0ll_S");
    static STRUCT_IF_C Vp_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_S, Vp_BFu0ll_S)
//============================================================================


struct  Vp_BFu0ll_Uc  {
  void *v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0ll_Uc) C1{ Fp FL:0 Fc}



static void Test_Vp_BFu0ll_Uc()
{
  {
    init_simple_test("Vp_BFu0ll_Uc");
    static STRUCT_IF_C Vp_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_Uc, Vp_BFu0ll_Uc)
//============================================================================


struct  Vp_BFu0ll_Ui  {
  void *v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0ll_Ui) C1{ Fp FL:0 Fi}



static void Test_Vp_BFu0ll_Ui()
{
  {
    init_simple_test("Vp_BFu0ll_Ui");
    static STRUCT_IF_C Vp_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_Ui, Vp_BFu0ll_Ui)
//============================================================================


struct  Vp_BFu0ll_Ul  {
  void *v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0ll_Ul) C1{ Fp FL:0 FL}



static void Test_Vp_BFu0ll_Ul()
{
  {
    init_simple_test("Vp_BFu0ll_Ul");
    static STRUCT_IF_C Vp_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_Ul, Vp_BFu0ll_Ul)
//============================================================================


struct  Vp_BFu0ll_Us  {
  void *v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0ll_Us) C1{ Fp FL:0 Fs}



static void Test_Vp_BFu0ll_Us()
{
  {
    init_simple_test("Vp_BFu0ll_Us");
    static STRUCT_IF_C Vp_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_Us, Vp_BFu0ll_Us)
//============================================================================


struct  Vp_BFu0ll_Vp  {
  void *v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Vp_BFu0ll_Vp) C1{ Fp FL:0 Fp}



static void Test_Vp_BFu0ll_Vp()
{
  {
    init_simple_test("Vp_BFu0ll_Vp");
    static STRUCT_IF_C Vp_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0ll_Vp, Vp_BFu0ll_Vp)
//============================================================================


struct  Vp_BFu0s  {
  void *v1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0s) C1{ Fp Fs:0}



static void Test_Vp_BFu0s()
{
  {
    init_simple_test("Vp_BFu0s");
    static STRUCT_IF_C Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s, Vp_BFu0s)
//============================================================================


struct  Vp_BFu0s_BFu0c  {
  void *v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Vp_BFu0s_BFu0c) C1{ Fp Fs:0 Fc:0}



static void Test_Vp_BFu0s_BFu0c()
{
  {
    init_simple_test("Vp_BFu0s_BFu0c");
    static STRUCT_IF_C Vp_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu0c, Vp_BFu0s_BFu0c)
//============================================================================


struct  Vp_BFu0s_BFu0i  {
  void *v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Vp_BFu0s_BFu0i) C1{ Fp Fs:0 Fi:0}



static void Test_Vp_BFu0s_BFu0i()
{
  {
    init_simple_test("Vp_BFu0s_BFu0i");
    static STRUCT_IF_C Vp_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu0i, Vp_BFu0s_BFu0i)
//============================================================================


struct  Vp_BFu0s_BFu0ll  {
  void *v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Vp_BFu0s_BFu0ll) C1{ Fp Fs:0 FL:0}



static void Test_Vp_BFu0s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu0ll");
    static STRUCT_IF_C Vp_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu0ll, Vp_BFu0s_BFu0ll)
//============================================================================


struct  Vp_BFu0s_BFu0s  {
  void *v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Vp_BFu0s_BFu0s) C1{ Fp Fs:0 Fs:0}



static void Test_Vp_BFu0s_BFu0s()
{
  {
    init_simple_test("Vp_BFu0s_BFu0s");
    static STRUCT_IF_C Vp_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Vp_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu0s, Vp_BFu0s_BFu0s)
//============================================================================


struct  Vp_BFu0s_BFu15i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Vp_BFu0s_BFu15i) C1{ Fp Fs:0 Fi:15}



static void Test_Vp_BFu0s_BFu15i()
{
  {
    init_simple_test("Vp_BFu0s_BFu15i");
    static STRUCT_IF_C Vp_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu15i, Vp_BFu0s_BFu15i)
//============================================================================


struct  Vp_BFu0s_BFu15ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Vp_BFu0s_BFu15ll) C1{ Fp Fs:0 FL:15}



static void Test_Vp_BFu0s_BFu15ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu15ll");
    static STRUCT_IF_C Vp_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu15ll, Vp_BFu0s_BFu15ll)
//============================================================================


struct  Vp_BFu0s_BFu15s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Vp_BFu0s_BFu15s) C1{ Fp Fs:0 Fs:15}



static void Test_Vp_BFu0s_BFu15s()
{
  {
    init_simple_test("Vp_BFu0s_BFu15s");
    static STRUCT_IF_C Vp_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu15s, Vp_BFu0s_BFu15s)
//============================================================================


struct  Vp_BFu0s_BFu16i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Vp_BFu0s_BFu16i) C1{ Fp Fs:0 Fi:16}



static void Test_Vp_BFu0s_BFu16i()
{
  {
    init_simple_test("Vp_BFu0s_BFu16i");
    static STRUCT_IF_C Vp_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu16i, Vp_BFu0s_BFu16i)
//============================================================================


struct  Vp_BFu0s_BFu16ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Vp_BFu0s_BFu16ll) C1{ Fp Fs:0 FL:16}



static void Test_Vp_BFu0s_BFu16ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu16ll");
    static STRUCT_IF_C Vp_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu16ll, Vp_BFu0s_BFu16ll)
//============================================================================


struct  Vp_BFu0s_BFu16s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Vp_BFu0s_BFu16s) C1{ Fp Fs:0 Fs:16}



static void Test_Vp_BFu0s_BFu16s()
{
  {
    init_simple_test("Vp_BFu0s_BFu16s");
    static STRUCT_IF_C Vp_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu16s, Vp_BFu0s_BFu16s)
//============================================================================


struct  Vp_BFu0s_BFu17i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Vp_BFu0s_BFu17i) C1{ Fp Fs:0 Fi:17}



static void Test_Vp_BFu0s_BFu17i()
{
  {
    init_simple_test("Vp_BFu0s_BFu17i");
    static STRUCT_IF_C Vp_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu17i, Vp_BFu0s_BFu17i)
//============================================================================


struct  Vp_BFu0s_BFu17ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Vp_BFu0s_BFu17ll) C1{ Fp Fs:0 FL:17}



static void Test_Vp_BFu0s_BFu17ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu17ll");
    static STRUCT_IF_C Vp_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu17ll, Vp_BFu0s_BFu17ll)
//============================================================================


struct  Vp_BFu0s_BFu1c  {
  void *v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Vp_BFu0s_BFu1c) C1{ Fp Fs:0 Fc:1}



static void Test_Vp_BFu0s_BFu1c()
{
  {
    init_simple_test("Vp_BFu0s_BFu1c");
    static STRUCT_IF_C Vp_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu1c, Vp_BFu0s_BFu1c)
//============================================================================


struct  Vp_BFu0s_BFu1i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Vp_BFu0s_BFu1i) C1{ Fp Fs:0 Fi:1}



static void Test_Vp_BFu0s_BFu1i()
{
  {
    init_simple_test("Vp_BFu0s_BFu1i");
    static STRUCT_IF_C Vp_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu1i, Vp_BFu0s_BFu1i)
//============================================================================


struct  Vp_BFu0s_BFu1ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Vp_BFu0s_BFu1ll) C1{ Fp Fs:0 FL:1}



static void Test_Vp_BFu0s_BFu1ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu1ll");
    static STRUCT_IF_C Vp_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu1ll, Vp_BFu0s_BFu1ll)
//============================================================================


struct  Vp_BFu0s_BFu1s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Vp_BFu0s_BFu1s) C1{ Fp Fs:0 Fs:1}



static void Test_Vp_BFu0s_BFu1s()
{
  {
    init_simple_test("Vp_BFu0s_BFu1s");
    static STRUCT_IF_C Vp_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu1s, Vp_BFu0s_BFu1s)
//============================================================================


struct  Vp_BFu0s_BFu31i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Vp_BFu0s_BFu31i) C1{ Fp Fs:0 Fi:31}



static void Test_Vp_BFu0s_BFu31i()
{
  {
    init_simple_test("Vp_BFu0s_BFu31i");
    static STRUCT_IF_C Vp_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu31i, Vp_BFu0s_BFu31i)
//============================================================================


struct  Vp_BFu0s_BFu31ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Vp_BFu0s_BFu31ll) C1{ Fp Fs:0 FL:31}



static void Test_Vp_BFu0s_BFu31ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu31ll");
    static STRUCT_IF_C Vp_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu31ll, Vp_BFu0s_BFu31ll)
//============================================================================


struct  Vp_BFu0s_BFu32i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Vp_BFu0s_BFu32i) C1{ Fp Fs:0 Fi:32}



static void Test_Vp_BFu0s_BFu32i()
{
  {
    init_simple_test("Vp_BFu0s_BFu32i");
    static STRUCT_IF_C Vp_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu32i, Vp_BFu0s_BFu32i)
//============================================================================


struct  Vp_BFu0s_BFu32ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Vp_BFu0s_BFu32ll) C1{ Fp Fs:0 FL:32}



static void Test_Vp_BFu0s_BFu32ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu32ll");
    static STRUCT_IF_C Vp_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu32ll, Vp_BFu0s_BFu32ll)
//============================================================================


struct  Vp_BFu0s_BFu33  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Vp_BFu0s_BFu33) C1{ Fp Fs:0 FL:33}



static void Test_Vp_BFu0s_BFu33()
{
  {
    init_simple_test("Vp_BFu0s_BFu33");
    static STRUCT_IF_C Vp_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu33, Vp_BFu0s_BFu33)
//============================================================================


struct  Vp_BFu0s_BFu7c  {
  void *v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Vp_BFu0s_BFu7c) C1{ Fp Fs:0 Fc:7}



static void Test_Vp_BFu0s_BFu7c()
{
  {
    init_simple_test("Vp_BFu0s_BFu7c");
    static STRUCT_IF_C Vp_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu7c, Vp_BFu0s_BFu7c)
//============================================================================


struct  Vp_BFu0s_BFu7i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Vp_BFu0s_BFu7i) C1{ Fp Fs:0 Fi:7}



static void Test_Vp_BFu0s_BFu7i()
{
  {
    init_simple_test("Vp_BFu0s_BFu7i");
    static STRUCT_IF_C Vp_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu7i, Vp_BFu0s_BFu7i)
//============================================================================


struct  Vp_BFu0s_BFu7ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Vp_BFu0s_BFu7ll) C1{ Fp Fs:0 FL:7}



static void Test_Vp_BFu0s_BFu7ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu7ll");
    static STRUCT_IF_C Vp_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu7ll, Vp_BFu0s_BFu7ll)
//============================================================================


struct  Vp_BFu0s_BFu7s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Vp_BFu0s_BFu7s) C1{ Fp Fs:0 Fs:7}



static void Test_Vp_BFu0s_BFu7s()
{
  {
    init_simple_test("Vp_BFu0s_BFu7s");
    static STRUCT_IF_C Vp_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu7s, Vp_BFu0s_BFu7s)
//============================================================================


struct  Vp_BFu0s_BFu8c  {
  void *v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Vp_BFu0s_BFu8c) C1{ Fp Fs:0 Fc:8}



static void Test_Vp_BFu0s_BFu8c()
{
  {
    init_simple_test("Vp_BFu0s_BFu8c");
    static STRUCT_IF_C Vp_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu8c, Vp_BFu0s_BFu8c)
//============================================================================


struct  Vp_BFu0s_BFu8i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Vp_BFu0s_BFu8i) C1{ Fp Fs:0 Fi:8}



static void Test_Vp_BFu0s_BFu8i()
{
  {
    init_simple_test("Vp_BFu0s_BFu8i");
    static STRUCT_IF_C Vp_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu8i, Vp_BFu0s_BFu8i)
//============================================================================


struct  Vp_BFu0s_BFu8ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Vp_BFu0s_BFu8ll) C1{ Fp Fs:0 FL:8}



static void Test_Vp_BFu0s_BFu8ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu8ll");
    static STRUCT_IF_C Vp_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu8ll, Vp_BFu0s_BFu8ll)
//============================================================================


struct  Vp_BFu0s_BFu8s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Vp_BFu0s_BFu8s) C1{ Fp Fs:0 Fs:8}



static void Test_Vp_BFu0s_BFu8s()
{
  {
    init_simple_test("Vp_BFu0s_BFu8s");
    static STRUCT_IF_C Vp_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu8s, Vp_BFu0s_BFu8s)
//============================================================================


struct  Vp_BFu0s_BFu9i  {
  void *v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Vp_BFu0s_BFu9i) C1{ Fp Fs:0 Fi:9}



static void Test_Vp_BFu0s_BFu9i()
{
  {
    init_simple_test("Vp_BFu0s_BFu9i");
    static STRUCT_IF_C Vp_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu9i, Vp_BFu0s_BFu9i)
//============================================================================


struct  Vp_BFu0s_BFu9ll  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Vp_BFu0s_BFu9ll) C1{ Fp Fs:0 FL:9}



static void Test_Vp_BFu0s_BFu9ll()
{
  {
    init_simple_test("Vp_BFu0s_BFu9ll");
    static STRUCT_IF_C Vp_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu9ll, Vp_BFu0s_BFu9ll)
//============================================================================


struct  Vp_BFu0s_BFu9s  {
  void *v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Vp_BFu0s_BFu9s) C1{ Fp Fs:0 Fs:9}



static void Test_Vp_BFu0s_BFu9s()
{
  {
    init_simple_test("Vp_BFu0s_BFu9s");
    static STRUCT_IF_C Vp_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_BFu9s, Vp_BFu0s_BFu9s)
//============================================================================


struct  Vp_BFu0s_C  {
  void *v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Vp_BFu0s_C) C1{ Fp Fs:0 Fc}



static void Test_Vp_BFu0s_C()
{
  {
    init_simple_test("Vp_BFu0s_C");
    static STRUCT_IF_C Vp_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_C, Vp_BFu0s_C)
//============================================================================


struct  Vp_BFu0s_D  {
  void *v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Vp_BFu0s_D) C1{ Fp Fs:0 FL}



static void Test_Vp_BFu0s_D()
{
  {
    init_simple_test("Vp_BFu0s_D");
    static STRUCT_IF_C Vp_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_D, Vp_BFu0s_D)
//============================================================================


struct  Vp_BFu0s_F  {
  void *v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Vp_BFu0s_F) C1{ Fp Fs:0 Fi}



static void Test_Vp_BFu0s_F()
{
  {
    init_simple_test("Vp_BFu0s_F");
    static STRUCT_IF_C Vp_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_F, Vp_BFu0s_F)
//============================================================================


struct  Vp_BFu0s_I  {
  void *v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Vp_BFu0s_I) C1{ Fp Fs:0 Fi}



static void Test_Vp_BFu0s_I()
{
  {
    init_simple_test("Vp_BFu0s_I");
    static STRUCT_IF_C Vp_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_I, Vp_BFu0s_I)
//============================================================================


struct  Vp_BFu0s_Ip  {
  void *v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Vp_BFu0s_Ip) C1{ Fp Fs:0 Fp}



static void Test_Vp_BFu0s_Ip()
{
  {
    init_simple_test("Vp_BFu0s_Ip");
    static STRUCT_IF_C Vp_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_Ip, Vp_BFu0s_Ip)
//============================================================================


struct  Vp_BFu0s_L  {
  void *v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Vp_BFu0s_L) C1{ Fp Fs:0 FL}



static void Test_Vp_BFu0s_L()
{
  {
    init_simple_test("Vp_BFu0s_L");
    static STRUCT_IF_C Vp_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_L, Vp_BFu0s_L)
//============================================================================


struct  Vp_BFu0s_S  {
  void *v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Vp_BFu0s_S) C1{ Fp Fs:0 Fs}



static void Test_Vp_BFu0s_S()
{
  {
    init_simple_test("Vp_BFu0s_S");
    static STRUCT_IF_C Vp_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_S, Vp_BFu0s_S)
//============================================================================


struct  Vp_BFu0s_Uc  {
  void *v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Vp_BFu0s_Uc) C1{ Fp Fs:0 Fc}



static void Test_Vp_BFu0s_Uc()
{
  {
    init_simple_test("Vp_BFu0s_Uc");
    static STRUCT_IF_C Vp_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_Uc, Vp_BFu0s_Uc)
//============================================================================


struct  Vp_BFu0s_Ui  {
  void *v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Vp_BFu0s_Ui) C1{ Fp Fs:0 Fi}



static void Test_Vp_BFu0s_Ui()
{
  {
    init_simple_test("Vp_BFu0s_Ui");
    static STRUCT_IF_C Vp_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_Ui, Vp_BFu0s_Ui)
//============================================================================


struct  Vp_BFu0s_Ul  {
  void *v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Vp_BFu0s_Ul) C1{ Fp Fs:0 FL}



static void Test_Vp_BFu0s_Ul()
{
  {
    init_simple_test("Vp_BFu0s_Ul");
    static STRUCT_IF_C Vp_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_Ul, Vp_BFu0s_Ul)
//============================================================================


struct  Vp_BFu0s_Us  {
  void *v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Vp_BFu0s_Us) C1{ Fp Fs:0 Fs}



static void Test_Vp_BFu0s_Us()
{
  {
    init_simple_test("Vp_BFu0s_Us");
    static STRUCT_IF_C Vp_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_Us, Vp_BFu0s_Us)
//============================================================================


struct  Vp_BFu0s_Vp  {
  void *v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Vp_BFu0s_Vp) C1{ Fp Fs:0 Fp}



static void Test_Vp_BFu0s_Vp()
{
  {
    init_simple_test("Vp_BFu0s_Vp");
    static STRUCT_IF_C Vp_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Vp_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu0s_Vp, Vp_BFu0s_Vp)
//============================================================================


struct  Vp_BFu15i_BFu0c  {
  void *v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Vp_BFu15i_BFu0c) C1{ Fp Fi:15 Fc:0}



static void Test_Vp_BFu15i_BFu0c()
{
  {
    init_simple_test("Vp_BFu15i_BFu0c");
    static STRUCT_IF_C Vp_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15i_BFu0c, Vp_BFu15i_BFu0c)
//============================================================================


struct  Vp_BFu15i_BFu0i  {
  void *v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Vp_BFu15i_BFu0i) C1{ Fp Fi:15 Fi:0}



static void Test_Vp_BFu15i_BFu0i()
{
  {
    init_simple_test("Vp_BFu15i_BFu0i");
    static STRUCT_IF_C Vp_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15i_BFu0i, Vp_BFu15i_BFu0i)
//============================================================================


struct  Vp_BFu15i_BFu0ll  {
  void *v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Vp_BFu15i_BFu0ll) C1{ Fp Fi:15 FL:0}



static void Test_Vp_BFu15i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu15i_BFu0ll");
    static STRUCT_IF_C Vp_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15i_BFu0ll, Vp_BFu15i_BFu0ll)
//============================================================================


struct  Vp_BFu15i_BFu0s  {
  void *v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Vp_BFu15i_BFu0s) C1{ Fp Fi:15 Fs:0}



static void Test_Vp_BFu15i_BFu0s()
{
  {
    init_simple_test("Vp_BFu15i_BFu0s");
    static STRUCT_IF_C Vp_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15i_BFu0s, Vp_BFu15i_BFu0s)
//============================================================================


struct  Vp_BFu15ll_BFu0c  {
  void *v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Vp_BFu15ll_BFu0c) C1{ Fp FL:15 Fc:0}



static void Test_Vp_BFu15ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0c");
    static STRUCT_IF_C Vp_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15ll_BFu0c, Vp_BFu15ll_BFu0c)
//============================================================================


struct  Vp_BFu15ll_BFu0i  {
  void *v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Vp_BFu15ll_BFu0i) C1{ Fp FL:15 Fi:0}



static void Test_Vp_BFu15ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0i");
    static STRUCT_IF_C Vp_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15ll_BFu0i, Vp_BFu15ll_BFu0i)
//============================================================================


struct  Vp_BFu15ll_BFu0ll  {
  void *v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Vp_BFu15ll_BFu0ll) C1{ Fp FL:15 FL:0}



static void Test_Vp_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15ll_BFu0ll, Vp_BFu15ll_BFu0ll)
//============================================================================


struct  Vp_BFu15ll_BFu0s  {
  void *v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Vp_BFu15ll_BFu0s) C1{ Fp FL:15 Fs:0}



static void Test_Vp_BFu15ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu15ll_BFu0s");
    static STRUCT_IF_C Vp_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15ll_BFu0s, Vp_BFu15ll_BFu0s)
//============================================================================


struct  Vp_BFu15s_BFu0c  {
  void *v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Vp_BFu15s_BFu0c) C1{ Fp Fs:15 Fc:0}



static void Test_Vp_BFu15s_BFu0c()
{
  {
    init_simple_test("Vp_BFu15s_BFu0c");
    static STRUCT_IF_C Vp_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15s_BFu0c, Vp_BFu15s_BFu0c)
//============================================================================


struct  Vp_BFu15s_BFu0i  {
  void *v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Vp_BFu15s_BFu0i) C1{ Fp Fs:15 Fi:0}



static void Test_Vp_BFu15s_BFu0i()
{
  {
    init_simple_test("Vp_BFu15s_BFu0i");
    static STRUCT_IF_C Vp_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15s_BFu0i, Vp_BFu15s_BFu0i)
//============================================================================


struct  Vp_BFu15s_BFu0ll  {
  void *v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Vp_BFu15s_BFu0ll) C1{ Fp Fs:15 FL:0}



static void Test_Vp_BFu15s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu15s_BFu0ll");
    static STRUCT_IF_C Vp_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15s_BFu0ll, Vp_BFu15s_BFu0ll)
//============================================================================


struct  Vp_BFu15s_BFu0s  {
  void *v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Vp_BFu15s_BFu0s) C1{ Fp Fs:15 Fs:0}



static void Test_Vp_BFu15s_BFu0s()
{
  {
    init_simple_test("Vp_BFu15s_BFu0s");
    static STRUCT_IF_C Vp_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Vp_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Vp_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu15s_BFu0s, Vp_BFu15s_BFu0s)
//============================================================================


struct  Vp_BFu16i_BFu0c  {
  void *v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Vp_BFu16i_BFu0c) C1{ Fp Fi:16 Fc:0}



static void Test_Vp_BFu16i_BFu0c()
{
  {
    init_simple_test("Vp_BFu16i_BFu0c");
    static STRUCT_IF_C Vp_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16i_BFu0c, Vp_BFu16i_BFu0c)
//============================================================================


struct  Vp_BFu16i_BFu0i  {
  void *v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Vp_BFu16i_BFu0i) C1{ Fp Fi:16 Fi:0}



static void Test_Vp_BFu16i_BFu0i()
{
  {
    init_simple_test("Vp_BFu16i_BFu0i");
    static STRUCT_IF_C Vp_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16i_BFu0i, Vp_BFu16i_BFu0i)
//============================================================================


struct  Vp_BFu16i_BFu0ll  {
  void *v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Vp_BFu16i_BFu0ll) C1{ Fp Fi:16 FL:0}



static void Test_Vp_BFu16i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu16i_BFu0ll");
    static STRUCT_IF_C Vp_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16i_BFu0ll, Vp_BFu16i_BFu0ll)
//============================================================================


struct  Vp_BFu16i_BFu0s  {
  void *v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Vp_BFu16i_BFu0s) C1{ Fp Fi:16 Fs:0}



static void Test_Vp_BFu16i_BFu0s()
{
  {
    init_simple_test("Vp_BFu16i_BFu0s");
    static STRUCT_IF_C Vp_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16i_BFu0s, Vp_BFu16i_BFu0s)
//============================================================================


struct  Vp_BFu16ll_BFu0c  {
  void *v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Vp_BFu16ll_BFu0c) C1{ Fp FL:16 Fc:0}



static void Test_Vp_BFu16ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0c");
    static STRUCT_IF_C Vp_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16ll_BFu0c, Vp_BFu16ll_BFu0c)
//============================================================================


struct  Vp_BFu16ll_BFu0i  {
  void *v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Vp_BFu16ll_BFu0i) C1{ Fp FL:16 Fi:0}



static void Test_Vp_BFu16ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0i");
    static STRUCT_IF_C Vp_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16ll_BFu0i, Vp_BFu16ll_BFu0i)
//============================================================================


struct  Vp_BFu16ll_BFu0ll  {
  void *v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Vp_BFu16ll_BFu0ll) C1{ Fp FL:16 FL:0}



static void Test_Vp_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16ll_BFu0ll, Vp_BFu16ll_BFu0ll)
//============================================================================


struct  Vp_BFu16ll_BFu0s  {
  void *v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Vp_BFu16ll_BFu0s) C1{ Fp FL:16 Fs:0}



static void Test_Vp_BFu16ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu16ll_BFu0s");
    static STRUCT_IF_C Vp_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16ll_BFu0s, Vp_BFu16ll_BFu0s)
//============================================================================


struct  Vp_BFu16s_BFu0c  {
  void *v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Vp_BFu16s_BFu0c) C1{ Fp Fs:16 Fc:0}



static void Test_Vp_BFu16s_BFu0c()
{
  {
    init_simple_test("Vp_BFu16s_BFu0c");
    static STRUCT_IF_C Vp_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16s_BFu0c, Vp_BFu16s_BFu0c)
//============================================================================


struct  Vp_BFu16s_BFu0i  {
  void *v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Vp_BFu16s_BFu0i) C1{ Fp Fs:16 Fi:0}



static void Test_Vp_BFu16s_BFu0i()
{
  {
    init_simple_test("Vp_BFu16s_BFu0i");
    static STRUCT_IF_C Vp_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16s_BFu0i, Vp_BFu16s_BFu0i)
//============================================================================


struct  Vp_BFu16s_BFu0ll  {
  void *v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Vp_BFu16s_BFu0ll) C1{ Fp Fs:16 FL:0}



static void Test_Vp_BFu16s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu16s_BFu0ll");
    static STRUCT_IF_C Vp_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16s_BFu0ll, Vp_BFu16s_BFu0ll)
//============================================================================


struct  Vp_BFu16s_BFu0s  {
  void *v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Vp_BFu16s_BFu0s) C1{ Fp Fs:16 Fs:0}



static void Test_Vp_BFu16s_BFu0s()
{
  {
    init_simple_test("Vp_BFu16s_BFu0s");
    static STRUCT_IF_C Vp_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Vp_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Vp_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu16s_BFu0s, Vp_BFu16s_BFu0s)
//============================================================================


struct  Vp_BFu17i_BFu0c  {
  void *v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Vp_BFu17i_BFu0c) C1{ Fp Fi:17 Fc:0}



static void Test_Vp_BFu17i_BFu0c()
{
  {
    init_simple_test("Vp_BFu17i_BFu0c");
    static STRUCT_IF_C Vp_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17i_BFu0c, Vp_BFu17i_BFu0c)
//============================================================================


struct  Vp_BFu17i_BFu0i  {
  void *v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Vp_BFu17i_BFu0i) C1{ Fp Fi:17 Fi:0}



static void Test_Vp_BFu17i_BFu0i()
{
  {
    init_simple_test("Vp_BFu17i_BFu0i");
    static STRUCT_IF_C Vp_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17i_BFu0i, Vp_BFu17i_BFu0i)
//============================================================================


struct  Vp_BFu17i_BFu0ll  {
  void *v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Vp_BFu17i_BFu0ll) C1{ Fp Fi:17 FL:0}



static void Test_Vp_BFu17i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu17i_BFu0ll");
    static STRUCT_IF_C Vp_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17i_BFu0ll, Vp_BFu17i_BFu0ll)
//============================================================================


struct  Vp_BFu17i_BFu0s  {
  void *v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Vp_BFu17i_BFu0s) C1{ Fp Fi:17 Fs:0}



static void Test_Vp_BFu17i_BFu0s()
{
  {
    init_simple_test("Vp_BFu17i_BFu0s");
    static STRUCT_IF_C Vp_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17i_BFu0s, Vp_BFu17i_BFu0s)
//============================================================================


struct  Vp_BFu17ll_BFu0c  {
  void *v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Vp_BFu17ll_BFu0c) C1{ Fp FL:17 Fc:0}



static void Test_Vp_BFu17ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0c");
    static STRUCT_IF_C Vp_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17ll_BFu0c, Vp_BFu17ll_BFu0c)
//============================================================================


struct  Vp_BFu17ll_BFu0i  {
  void *v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Vp_BFu17ll_BFu0i) C1{ Fp FL:17 Fi:0}



static void Test_Vp_BFu17ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0i");
    static STRUCT_IF_C Vp_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17ll_BFu0i, Vp_BFu17ll_BFu0i)
//============================================================================


struct  Vp_BFu17ll_BFu0ll  {
  void *v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Vp_BFu17ll_BFu0ll) C1{ Fp FL:17 FL:0}



static void Test_Vp_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17ll_BFu0ll, Vp_BFu17ll_BFu0ll)
//============================================================================


struct  Vp_BFu17ll_BFu0s  {
  void *v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Vp_BFu17ll_BFu0s) C1{ Fp FL:17 Fs:0}



static void Test_Vp_BFu17ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu17ll_BFu0s");
    static STRUCT_IF_C Vp_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Vp_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Vp_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu17ll_BFu0s, Vp_BFu17ll_BFu0s)
//============================================================================


struct  Vp_BFu1c_BFu0c  {
  void *v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1c_BFu0c) C1{ Fp Fc:1 Fc:0}



static void Test_Vp_BFu1c_BFu0c()
{
  {
    init_simple_test("Vp_BFu1c_BFu0c");
    static STRUCT_IF_C Vp_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1c_BFu0c, Vp_BFu1c_BFu0c)
//============================================================================


struct  Vp_BFu1c_BFu0i  {
  void *v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1c_BFu0i) C1{ Fp Fc:1 Fi:0}



static void Test_Vp_BFu1c_BFu0i()
{
  {
    init_simple_test("Vp_BFu1c_BFu0i");
    static STRUCT_IF_C Vp_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1c_BFu0i, Vp_BFu1c_BFu0i)
//============================================================================


struct  Vp_BFu1c_BFu0ll  {
  void *v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1c_BFu0ll) C1{ Fp Fc:1 FL:0}



static void Test_Vp_BFu1c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1c_BFu0ll");
    static STRUCT_IF_C Vp_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1c_BFu0ll, Vp_BFu1c_BFu0ll)
//============================================================================


struct  Vp_BFu1c_BFu0s  {
  void *v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1c_BFu0s) C1{ Fp Fc:1 Fs:0}



static void Test_Vp_BFu1c_BFu0s()
{
  {
    init_simple_test("Vp_BFu1c_BFu0s");
    static STRUCT_IF_C Vp_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1c_BFu0s, Vp_BFu1c_BFu0s)
//============================================================================


struct  Vp_BFu1i_BFu0c  {
  void *v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1i_BFu0c) C1{ Fp Fi:1 Fc:0}



static void Test_Vp_BFu1i_BFu0c()
{
  {
    init_simple_test("Vp_BFu1i_BFu0c");
    static STRUCT_IF_C Vp_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1i_BFu0c, Vp_BFu1i_BFu0c)
//============================================================================


struct  Vp_BFu1i_BFu0i  {
  void *v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1i_BFu0i) C1{ Fp Fi:1 Fi:0}



static void Test_Vp_BFu1i_BFu0i()
{
  {
    init_simple_test("Vp_BFu1i_BFu0i");
    static STRUCT_IF_C Vp_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1i_BFu0i, Vp_BFu1i_BFu0i)
//============================================================================


struct  Vp_BFu1i_BFu0ll  {
  void *v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1i_BFu0ll) C1{ Fp Fi:1 FL:0}



static void Test_Vp_BFu1i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1i_BFu0ll");
    static STRUCT_IF_C Vp_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1i_BFu0ll, Vp_BFu1i_BFu0ll)
//============================================================================


struct  Vp_BFu1i_BFu0s  {
  void *v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1i_BFu0s) C1{ Fp Fi:1 Fs:0}



static void Test_Vp_BFu1i_BFu0s()
{
  {
    init_simple_test("Vp_BFu1i_BFu0s");
    static STRUCT_IF_C Vp_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1i_BFu0s, Vp_BFu1i_BFu0s)
//============================================================================


struct  Vp_BFu1ll_BFu0c  {
  void *v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1ll_BFu0c) C1{ Fp FL:1 Fc:0}



static void Test_Vp_BFu1ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0c");
    static STRUCT_IF_C Vp_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1ll_BFu0c, Vp_BFu1ll_BFu0c)
//============================================================================


struct  Vp_BFu1ll_BFu0i  {
  void *v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1ll_BFu0i) C1{ Fp FL:1 Fi:0}



static void Test_Vp_BFu1ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0i");
    static STRUCT_IF_C Vp_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1ll_BFu0i, Vp_BFu1ll_BFu0i)
//============================================================================


struct  Vp_BFu1ll_BFu0ll  {
  void *v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1ll_BFu0ll) C1{ Fp FL:1 FL:0}



static void Test_Vp_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1ll_BFu0ll, Vp_BFu1ll_BFu0ll)
//============================================================================


struct  Vp_BFu1ll_BFu0s  {
  void *v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1ll_BFu0s) C1{ Fp FL:1 Fs:0}



static void Test_Vp_BFu1ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu1ll_BFu0s");
    static STRUCT_IF_C Vp_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1ll_BFu0s, Vp_BFu1ll_BFu0s)
//============================================================================


struct  Vp_BFu1s_BFu0c  {
  void *v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Vp_BFu1s_BFu0c) C1{ Fp Fs:1 Fc:0}



static void Test_Vp_BFu1s_BFu0c()
{
  {
    init_simple_test("Vp_BFu1s_BFu0c");
    static STRUCT_IF_C Vp_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1s_BFu0c, Vp_BFu1s_BFu0c)
//============================================================================


struct  Vp_BFu1s_BFu0i  {
  void *v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Vp_BFu1s_BFu0i) C1{ Fp Fs:1 Fi:0}



static void Test_Vp_BFu1s_BFu0i()
{
  {
    init_simple_test("Vp_BFu1s_BFu0i");
    static STRUCT_IF_C Vp_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1s_BFu0i, Vp_BFu1s_BFu0i)
//============================================================================


struct  Vp_BFu1s_BFu0ll  {
  void *v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Vp_BFu1s_BFu0ll) C1{ Fp Fs:1 FL:0}



static void Test_Vp_BFu1s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu1s_BFu0ll");
    static STRUCT_IF_C Vp_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1s_BFu0ll, Vp_BFu1s_BFu0ll)
//============================================================================


struct  Vp_BFu1s_BFu0s  {
  void *v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Vp_BFu1s_BFu0s) C1{ Fp Fs:1 Fs:0}



static void Test_Vp_BFu1s_BFu0s()
{
  {
    init_simple_test("Vp_BFu1s_BFu0s");
    static STRUCT_IF_C Vp_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Vp_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu1s_BFu0s, Vp_BFu1s_BFu0s)
//============================================================================


struct  Vp_BFu31i_BFu0c  {
  void *v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Vp_BFu31i_BFu0c) C1{ Fp Fi:31 Fc:0}



static void Test_Vp_BFu31i_BFu0c()
{
  {
    init_simple_test("Vp_BFu31i_BFu0c");
    static STRUCT_IF_C Vp_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31i_BFu0c, Vp_BFu31i_BFu0c)
//============================================================================


struct  Vp_BFu31i_BFu0i  {
  void *v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Vp_BFu31i_BFu0i) C1{ Fp Fi:31 Fi:0}



static void Test_Vp_BFu31i_BFu0i()
{
  {
    init_simple_test("Vp_BFu31i_BFu0i");
    static STRUCT_IF_C Vp_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31i_BFu0i, Vp_BFu31i_BFu0i)
//============================================================================


struct  Vp_BFu31i_BFu0ll  {
  void *v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Vp_BFu31i_BFu0ll) C1{ Fp Fi:31 FL:0}



static void Test_Vp_BFu31i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu31i_BFu0ll");
    static STRUCT_IF_C Vp_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31i_BFu0ll, Vp_BFu31i_BFu0ll)
//============================================================================


struct  Vp_BFu31i_BFu0s  {
  void *v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Vp_BFu31i_BFu0s) C1{ Fp Fi:31 Fs:0}



static void Test_Vp_BFu31i_BFu0s()
{
  {
    init_simple_test("Vp_BFu31i_BFu0s");
    static STRUCT_IF_C Vp_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31i_BFu0s, Vp_BFu31i_BFu0s)
//============================================================================


struct  Vp_BFu31ll_BFu0c  {
  void *v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Vp_BFu31ll_BFu0c) C1{ Fp FL:31 Fc:0}



static void Test_Vp_BFu31ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0c");
    static STRUCT_IF_C Vp_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31ll_BFu0c, Vp_BFu31ll_BFu0c)
//============================================================================


struct  Vp_BFu31ll_BFu0i  {
  void *v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Vp_BFu31ll_BFu0i) C1{ Fp FL:31 Fi:0}



static void Test_Vp_BFu31ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0i");
    static STRUCT_IF_C Vp_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31ll_BFu0i, Vp_BFu31ll_BFu0i)
//============================================================================


struct  Vp_BFu31ll_BFu0ll  {
  void *v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Vp_BFu31ll_BFu0ll) C1{ Fp FL:31 FL:0}



static void Test_Vp_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31ll_BFu0ll, Vp_BFu31ll_BFu0ll)
//============================================================================


struct  Vp_BFu31ll_BFu0s  {
  void *v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Vp_BFu31ll_BFu0s) C1{ Fp FL:31 Fs:0}



static void Test_Vp_BFu31ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu31ll_BFu0s");
    static STRUCT_IF_C Vp_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Vp_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Vp_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu31ll_BFu0s, Vp_BFu31ll_BFu0s)
//============================================================================


struct  Vp_BFu32i_BFu0c  {
  void *v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Vp_BFu32i_BFu0c) C1{ Fp Fi:32 Fc:0}



static void Test_Vp_BFu32i_BFu0c()
{
  {
    init_simple_test("Vp_BFu32i_BFu0c");
    static STRUCT_IF_C Vp_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32i_BFu0c, Vp_BFu32i_BFu0c)
//============================================================================


struct  Vp_BFu32i_BFu0i  {
  void *v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Vp_BFu32i_BFu0i) C1{ Fp Fi:32 Fi:0}



static void Test_Vp_BFu32i_BFu0i()
{
  {
    init_simple_test("Vp_BFu32i_BFu0i");
    static STRUCT_IF_C Vp_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32i_BFu0i, Vp_BFu32i_BFu0i)
//============================================================================


struct  Vp_BFu32i_BFu0ll  {
  void *v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Vp_BFu32i_BFu0ll) C1{ Fp Fi:32 FL:0}



static void Test_Vp_BFu32i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu32i_BFu0ll");
    static STRUCT_IF_C Vp_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32i_BFu0ll, Vp_BFu32i_BFu0ll)
//============================================================================


struct  Vp_BFu32i_BFu0s  {
  void *v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Vp_BFu32i_BFu0s) C1{ Fp Fi:32 Fs:0}



static void Test_Vp_BFu32i_BFu0s()
{
  {
    init_simple_test("Vp_BFu32i_BFu0s");
    static STRUCT_IF_C Vp_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32i_BFu0s, Vp_BFu32i_BFu0s)
//============================================================================


struct  Vp_BFu32ll_BFu0c  {
  void *v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Vp_BFu32ll_BFu0c) C1{ Fp FL:32 Fc:0}



static void Test_Vp_BFu32ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0c");
    static STRUCT_IF_C Vp_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32ll_BFu0c, Vp_BFu32ll_BFu0c)
//============================================================================


struct  Vp_BFu32ll_BFu0i  {
  void *v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Vp_BFu32ll_BFu0i) C1{ Fp FL:32 Fi:0}



static void Test_Vp_BFu32ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0i");
    static STRUCT_IF_C Vp_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32ll_BFu0i, Vp_BFu32ll_BFu0i)
//============================================================================


struct  Vp_BFu32ll_BFu0ll  {
  void *v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Vp_BFu32ll_BFu0ll) C1{ Fp FL:32 FL:0}



static void Test_Vp_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32ll_BFu0ll, Vp_BFu32ll_BFu0ll)
//============================================================================


struct  Vp_BFu32ll_BFu0s  {
  void *v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Vp_BFu32ll_BFu0s) C1{ Fp FL:32 Fs:0}



static void Test_Vp_BFu32ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu32ll_BFu0s");
    static STRUCT_IF_C Vp_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Vp_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Vp_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu32ll_BFu0s, Vp_BFu32ll_BFu0s)
//============================================================================


struct  Vp_BFu33_BFu0c  {
  void *v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Vp_BFu33_BFu0c) C1{ Fp FL:33 Fc:0}



static void Test_Vp_BFu33_BFu0c()
{
  {
    init_simple_test("Vp_BFu33_BFu0c");
    static STRUCT_IF_C Vp_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu33_BFu0c, Vp_BFu33_BFu0c)
//============================================================================


struct  Vp_BFu33_BFu0i  {
  void *v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Vp_BFu33_BFu0i) C1{ Fp FL:33 Fi:0}



static void Test_Vp_BFu33_BFu0i()
{
  {
    init_simple_test("Vp_BFu33_BFu0i");
    static STRUCT_IF_C Vp_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu33_BFu0i, Vp_BFu33_BFu0i)
//============================================================================


struct  Vp_BFu33_BFu0ll  {
  void *v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Vp_BFu33_BFu0ll) C1{ Fp FL:33 FL:0}



static void Test_Vp_BFu33_BFu0ll()
{
  {
    init_simple_test("Vp_BFu33_BFu0ll");
    static STRUCT_IF_C Vp_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu33_BFu0ll, Vp_BFu33_BFu0ll)
//============================================================================


struct  Vp_BFu33_BFu0s  {
  void *v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Vp_BFu33_BFu0s) C1{ Fp FL:33 Fs:0}



static void Test_Vp_BFu33_BFu0s()
{
  {
    init_simple_test("Vp_BFu33_BFu0s");
    static STRUCT_IF_C Vp_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Vp_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Vp_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu33_BFu0s, Vp_BFu33_BFu0s)
//============================================================================


struct  Vp_BFu7c_BFu0c  {
  void *v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7c_BFu0c) C1{ Fp Fc:7 Fc:0}



static void Test_Vp_BFu7c_BFu0c()
{
  {
    init_simple_test("Vp_BFu7c_BFu0c");
    static STRUCT_IF_C Vp_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7c_BFu0c, Vp_BFu7c_BFu0c)
//============================================================================


struct  Vp_BFu7c_BFu0i  {
  void *v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7c_BFu0i) C1{ Fp Fc:7 Fi:0}



static void Test_Vp_BFu7c_BFu0i()
{
  {
    init_simple_test("Vp_BFu7c_BFu0i");
    static STRUCT_IF_C Vp_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7c_BFu0i, Vp_BFu7c_BFu0i)
//============================================================================


struct  Vp_BFu7c_BFu0ll  {
  void *v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7c_BFu0ll) C1{ Fp Fc:7 FL:0}



static void Test_Vp_BFu7c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7c_BFu0ll");
    static STRUCT_IF_C Vp_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7c_BFu0ll, Vp_BFu7c_BFu0ll)
//============================================================================


struct  Vp_BFu7c_BFu0s  {
  void *v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7c_BFu0s) C1{ Fp Fc:7 Fs:0}



static void Test_Vp_BFu7c_BFu0s()
{
  {
    init_simple_test("Vp_BFu7c_BFu0s");
    static STRUCT_IF_C Vp_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7c_BFu0s, Vp_BFu7c_BFu0s)
//============================================================================


struct  Vp_BFu7i_BFu0c  {
  void *v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7i_BFu0c) C1{ Fp Fi:7 Fc:0}



static void Test_Vp_BFu7i_BFu0c()
{
  {
    init_simple_test("Vp_BFu7i_BFu0c");
    static STRUCT_IF_C Vp_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7i_BFu0c, Vp_BFu7i_BFu0c)
//============================================================================


struct  Vp_BFu7i_BFu0i  {
  void *v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7i_BFu0i) C1{ Fp Fi:7 Fi:0}



static void Test_Vp_BFu7i_BFu0i()
{
  {
    init_simple_test("Vp_BFu7i_BFu0i");
    static STRUCT_IF_C Vp_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7i_BFu0i, Vp_BFu7i_BFu0i)
//============================================================================


struct  Vp_BFu7i_BFu0ll  {
  void *v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7i_BFu0ll) C1{ Fp Fi:7 FL:0}



static void Test_Vp_BFu7i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7i_BFu0ll");
    static STRUCT_IF_C Vp_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7i_BFu0ll, Vp_BFu7i_BFu0ll)
//============================================================================


struct  Vp_BFu7i_BFu0s  {
  void *v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7i_BFu0s) C1{ Fp Fi:7 Fs:0}



static void Test_Vp_BFu7i_BFu0s()
{
  {
    init_simple_test("Vp_BFu7i_BFu0s");
    static STRUCT_IF_C Vp_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7i_BFu0s, Vp_BFu7i_BFu0s)
//============================================================================


struct  Vp_BFu7ll_BFu0c  {
  void *v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7ll_BFu0c) C1{ Fp FL:7 Fc:0}



static void Test_Vp_BFu7ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0c");
    static STRUCT_IF_C Vp_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7ll_BFu0c, Vp_BFu7ll_BFu0c)
//============================================================================


struct  Vp_BFu7ll_BFu0i  {
  void *v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7ll_BFu0i) C1{ Fp FL:7 Fi:0}



static void Test_Vp_BFu7ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0i");
    static STRUCT_IF_C Vp_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7ll_BFu0i, Vp_BFu7ll_BFu0i)
//============================================================================


struct  Vp_BFu7ll_BFu0ll  {
  void *v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7ll_BFu0ll) C1{ Fp FL:7 FL:0}



static void Test_Vp_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7ll_BFu0ll, Vp_BFu7ll_BFu0ll)
//============================================================================


struct  Vp_BFu7ll_BFu0s  {
  void *v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7ll_BFu0s) C1{ Fp FL:7 Fs:0}



static void Test_Vp_BFu7ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu7ll_BFu0s");
    static STRUCT_IF_C Vp_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7ll_BFu0s, Vp_BFu7ll_BFu0s)
//============================================================================


struct  Vp_BFu7s_BFu0c  {
  void *v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Vp_BFu7s_BFu0c) C1{ Fp Fs:7 Fc:0}



static void Test_Vp_BFu7s_BFu0c()
{
  {
    init_simple_test("Vp_BFu7s_BFu0c");
    static STRUCT_IF_C Vp_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7s_BFu0c, Vp_BFu7s_BFu0c)
//============================================================================


struct  Vp_BFu7s_BFu0i  {
  void *v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Vp_BFu7s_BFu0i) C1{ Fp Fs:7 Fi:0}



static void Test_Vp_BFu7s_BFu0i()
{
  {
    init_simple_test("Vp_BFu7s_BFu0i");
    static STRUCT_IF_C Vp_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7s_BFu0i, Vp_BFu7s_BFu0i)
//============================================================================


struct  Vp_BFu7s_BFu0ll  {
  void *v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Vp_BFu7s_BFu0ll) C1{ Fp Fs:7 FL:0}



static void Test_Vp_BFu7s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu7s_BFu0ll");
    static STRUCT_IF_C Vp_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7s_BFu0ll, Vp_BFu7s_BFu0ll)
//============================================================================


struct  Vp_BFu7s_BFu0s  {
  void *v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Vp_BFu7s_BFu0s) C1{ Fp Fs:7 Fs:0}



static void Test_Vp_BFu7s_BFu0s()
{
  {
    init_simple_test("Vp_BFu7s_BFu0s");
    static STRUCT_IF_C Vp_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Vp_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Vp_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu7s_BFu0s, Vp_BFu7s_BFu0s)
//============================================================================


struct  Vp_BFu8c_BFu0c  {
  void *v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8c_BFu0c) C1{ Fp Fc:8 Fc:0}



static void Test_Vp_BFu8c_BFu0c()
{
  {
    init_simple_test("Vp_BFu8c_BFu0c");
    static STRUCT_IF_C Vp_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8c_BFu0c, Vp_BFu8c_BFu0c)
//============================================================================


struct  Vp_BFu8c_BFu0i  {
  void *v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8c_BFu0i) C1{ Fp Fc:8 Fi:0}



static void Test_Vp_BFu8c_BFu0i()
{
  {
    init_simple_test("Vp_BFu8c_BFu0i");
    static STRUCT_IF_C Vp_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8c_BFu0i, Vp_BFu8c_BFu0i)
//============================================================================


struct  Vp_BFu8c_BFu0ll  {
  void *v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8c_BFu0ll) C1{ Fp Fc:8 FL:0}



static void Test_Vp_BFu8c_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8c_BFu0ll");
    static STRUCT_IF_C Vp_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8c_BFu0ll, Vp_BFu8c_BFu0ll)
//============================================================================


struct  Vp_BFu8c_BFu0s  {
  void *v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8c_BFu0s) C1{ Fp Fc:8 Fs:0}



static void Test_Vp_BFu8c_BFu0s()
{
  {
    init_simple_test("Vp_BFu8c_BFu0s");
    static STRUCT_IF_C Vp_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8c_BFu0s, Vp_BFu8c_BFu0s)
//============================================================================


struct  Vp_BFu8i_BFu0c  {
  void *v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8i_BFu0c) C1{ Fp Fi:8 Fc:0}



static void Test_Vp_BFu8i_BFu0c()
{
  {
    init_simple_test("Vp_BFu8i_BFu0c");
    static STRUCT_IF_C Vp_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8i_BFu0c, Vp_BFu8i_BFu0c)
//============================================================================


struct  Vp_BFu8i_BFu0i  {
  void *v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8i_BFu0i) C1{ Fp Fi:8 Fi:0}



static void Test_Vp_BFu8i_BFu0i()
{
  {
    init_simple_test("Vp_BFu8i_BFu0i");
    static STRUCT_IF_C Vp_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8i_BFu0i, Vp_BFu8i_BFu0i)
//============================================================================


struct  Vp_BFu8i_BFu0ll  {
  void *v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8i_BFu0ll) C1{ Fp Fi:8 FL:0}



static void Test_Vp_BFu8i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8i_BFu0ll");
    static STRUCT_IF_C Vp_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8i_BFu0ll, Vp_BFu8i_BFu0ll)
//============================================================================


struct  Vp_BFu8i_BFu0s  {
  void *v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8i_BFu0s) C1{ Fp Fi:8 Fs:0}



static void Test_Vp_BFu8i_BFu0s()
{
  {
    init_simple_test("Vp_BFu8i_BFu0s");
    static STRUCT_IF_C Vp_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8i_BFu0s, Vp_BFu8i_BFu0s)
//============================================================================


struct  Vp_BFu8ll_BFu0c  {
  void *v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8ll_BFu0c) C1{ Fp FL:8 Fc:0}



static void Test_Vp_BFu8ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0c");
    static STRUCT_IF_C Vp_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8ll_BFu0c, Vp_BFu8ll_BFu0c)
//============================================================================


struct  Vp_BFu8ll_BFu0i  {
  void *v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8ll_BFu0i) C1{ Fp FL:8 Fi:0}



static void Test_Vp_BFu8ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0i");
    static STRUCT_IF_C Vp_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8ll_BFu0i, Vp_BFu8ll_BFu0i)
//============================================================================


struct  Vp_BFu8ll_BFu0ll  {
  void *v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8ll_BFu0ll) C1{ Fp FL:8 FL:0}



static void Test_Vp_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8ll_BFu0ll, Vp_BFu8ll_BFu0ll)
//============================================================================


struct  Vp_BFu8ll_BFu0s  {
  void *v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8ll_BFu0s) C1{ Fp FL:8 Fs:0}



static void Test_Vp_BFu8ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu8ll_BFu0s");
    static STRUCT_IF_C Vp_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8ll_BFu0s, Vp_BFu8ll_BFu0s)
//============================================================================


struct  Vp_BFu8s_BFu0c  {
  void *v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Vp_BFu8s_BFu0c) C1{ Fp Fs:8 Fc:0}



static void Test_Vp_BFu8s_BFu0c()
{
  {
    init_simple_test("Vp_BFu8s_BFu0c");
    static STRUCT_IF_C Vp_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8s_BFu0c, Vp_BFu8s_BFu0c)
//============================================================================


struct  Vp_BFu8s_BFu0i  {
  void *v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Vp_BFu8s_BFu0i) C1{ Fp Fs:8 Fi:0}



static void Test_Vp_BFu8s_BFu0i()
{
  {
    init_simple_test("Vp_BFu8s_BFu0i");
    static STRUCT_IF_C Vp_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8s_BFu0i, Vp_BFu8s_BFu0i)
//============================================================================


struct  Vp_BFu8s_BFu0ll  {
  void *v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Vp_BFu8s_BFu0ll) C1{ Fp Fs:8 FL:0}



static void Test_Vp_BFu8s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu8s_BFu0ll");
    static STRUCT_IF_C Vp_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8s_BFu0ll, Vp_BFu8s_BFu0ll)
//============================================================================


struct  Vp_BFu8s_BFu0s  {
  void *v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Vp_BFu8s_BFu0s) C1{ Fp Fs:8 Fs:0}



static void Test_Vp_BFu8s_BFu0s()
{
  {
    init_simple_test("Vp_BFu8s_BFu0s");
    static STRUCT_IF_C Vp_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Vp_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Vp_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu8s_BFu0s, Vp_BFu8s_BFu0s)
//============================================================================


struct  Vp_BFu9i_BFu0c  {
  void *v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Vp_BFu9i_BFu0c) C1{ Fp Fi:9 Fc:0}



static void Test_Vp_BFu9i_BFu0c()
{
  {
    init_simple_test("Vp_BFu9i_BFu0c");
    static STRUCT_IF_C Vp_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9i_BFu0c, Vp_BFu9i_BFu0c)
//============================================================================


struct  Vp_BFu9i_BFu0i  {
  void *v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Vp_BFu9i_BFu0i) C1{ Fp Fi:9 Fi:0}



static void Test_Vp_BFu9i_BFu0i()
{
  {
    init_simple_test("Vp_BFu9i_BFu0i");
    static STRUCT_IF_C Vp_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9i_BFu0i, Vp_BFu9i_BFu0i)
//============================================================================


struct  Vp_BFu9i_BFu0ll  {
  void *v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Vp_BFu9i_BFu0ll) C1{ Fp Fi:9 FL:0}



static void Test_Vp_BFu9i_BFu0ll()
{
  {
    init_simple_test("Vp_BFu9i_BFu0ll");
    static STRUCT_IF_C Vp_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9i_BFu0ll, Vp_BFu9i_BFu0ll)
//============================================================================


struct  Vp_BFu9i_BFu0s  {
  void *v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Vp_BFu9i_BFu0s) C1{ Fp Fi:9 Fs:0}



static void Test_Vp_BFu9i_BFu0s()
{
  {
    init_simple_test("Vp_BFu9i_BFu0s");
    static STRUCT_IF_C Vp_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9i_BFu0s, Vp_BFu9i_BFu0s)
//============================================================================


struct  Vp_BFu9ll_BFu0c  {
  void *v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Vp_BFu9ll_BFu0c) C1{ Fp FL:9 Fc:0}



static void Test_Vp_BFu9ll_BFu0c()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0c");
    static STRUCT_IF_C Vp_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9ll_BFu0c, Vp_BFu9ll_BFu0c)
//============================================================================


struct  Vp_BFu9ll_BFu0i  {
  void *v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Vp_BFu9ll_BFu0i) C1{ Fp FL:9 Fi:0}



static void Test_Vp_BFu9ll_BFu0i()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0i");
    static STRUCT_IF_C Vp_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9ll_BFu0i, Vp_BFu9ll_BFu0i)
//============================================================================


struct  Vp_BFu9ll_BFu0ll  {
  void *v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Vp_BFu9ll_BFu0ll) C1{ Fp FL:9 FL:0}



static void Test_Vp_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0ll");
    static STRUCT_IF_C Vp_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9ll_BFu0ll, Vp_BFu9ll_BFu0ll)
//============================================================================


struct  Vp_BFu9ll_BFu0s  {
  void *v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Vp_BFu9ll_BFu0s) C1{ Fp FL:9 Fs:0}



static void Test_Vp_BFu9ll_BFu0s()
{
  {
    init_simple_test("Vp_BFu9ll_BFu0s");
    static STRUCT_IF_C Vp_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9ll_BFu0s, Vp_BFu9ll_BFu0s)
//============================================================================


struct  Vp_BFu9s_BFu0c  {
  void *v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Vp_BFu9s_BFu0c) C1{ Fp Fs:9 Fc:0}



static void Test_Vp_BFu9s_BFu0c()
{
  {
    init_simple_test("Vp_BFu9s_BFu0c");
    static STRUCT_IF_C Vp_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9s_BFu0c, Vp_BFu9s_BFu0c)
//============================================================================


struct  Vp_BFu9s_BFu0i  {
  void *v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Vp_BFu9s_BFu0i) C1{ Fp Fs:9 Fi:0}



static void Test_Vp_BFu9s_BFu0i()
{
  {
    init_simple_test("Vp_BFu9s_BFu0i");
    static STRUCT_IF_C Vp_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9s_BFu0i, Vp_BFu9s_BFu0i)
//============================================================================


struct  Vp_BFu9s_BFu0ll  {
  void *v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Vp_BFu9s_BFu0ll) C1{ Fp Fs:9 FL:0}



static void Test_Vp_BFu9s_BFu0ll()
{
  {
    init_simple_test("Vp_BFu9s_BFu0ll");
    static STRUCT_IF_C Vp_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9s_BFu0ll, Vp_BFu9s_BFu0ll)
//============================================================================


struct  Vp_BFu9s_BFu0s  {
  void *v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Vp_BFu9s_BFu0s) C1{ Fp Fs:9 Fs:0}



static void Test_Vp_BFu9s_BFu0s()
{
  {
    init_simple_test("Vp_BFu9s_BFu0s");
    static STRUCT_IF_C Vp_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Vp_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Vp_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_BFu9s_BFu0s, Vp_BFu9s_BFu0s)
//============================================================================


struct  Vp_C_BFu0c  {
  void *v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Vp_C_BFu0c) C1{ Fp Fc Fc:0}



static void Test_Vp_C_BFu0c()
{
  {
    init_simple_test("Vp_C_BFu0c");
    static STRUCT_IF_C Vp_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_C_BFu0c, Vp_C_BFu0c)
//============================================================================


struct  Vp_C_BFu0i  {
  void *v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Vp_C_BFu0i) C1{ Fp Fc Fi:0}



static void Test_Vp_C_BFu0i()
{
  {
    init_simple_test("Vp_C_BFu0i");
    static STRUCT_IF_C Vp_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_C_BFu0i, Vp_C_BFu0i)
//============================================================================


struct  Vp_C_BFu0ll  {
  void *v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Vp_C_BFu0ll) C1{ Fp Fc FL:0}



static void Test_Vp_C_BFu0ll()
{
  {
    init_simple_test("Vp_C_BFu0ll");
    static STRUCT_IF_C Vp_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_C_BFu0ll, Vp_C_BFu0ll)
//============================================================================


struct  Vp_C_BFu0s  {
  void *v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Vp_C_BFu0s) C1{ Fp Fc Fs:0}



static void Test_Vp_C_BFu0s()
{
  {
    init_simple_test("Vp_C_BFu0s");
    static STRUCT_IF_C Vp_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_C_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_C_BFu0s, Vp_C_BFu0s)
//============================================================================


struct  Vp_D_BFu0c  {
  void *v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Vp_D_BFu0c) C1{ Fp FL Fc:0}



static void Test_Vp_D_BFu0c()
{
  {
    init_simple_test("Vp_D_BFu0c");
    static STRUCT_IF_C Vp_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_D_BFu0c, Vp_D_BFu0c)
//============================================================================


struct  Vp_D_BFu0i  {
  void *v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Vp_D_BFu0i) C1{ Fp FL Fi:0}



static void Test_Vp_D_BFu0i()
{
  {
    init_simple_test("Vp_D_BFu0i");
    static STRUCT_IF_C Vp_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_D_BFu0i, Vp_D_BFu0i)
//============================================================================


struct  Vp_D_BFu0ll  {
  void *v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Vp_D_BFu0ll) C1{ Fp FL FL:0}



static void Test_Vp_D_BFu0ll()
{
  {
    init_simple_test("Vp_D_BFu0ll");
    static STRUCT_IF_C Vp_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_D_BFu0ll, Vp_D_BFu0ll)
//============================================================================


struct  Vp_D_BFu0s  {
  void *v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Vp_D_BFu0s) C1{ Fp FL Fs:0}



static void Test_Vp_D_BFu0s()
{
  {
    init_simple_test("Vp_D_BFu0s");
    static STRUCT_IF_C Vp_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_D_BFu0s, Vp_D_BFu0s)
//============================================================================


struct  Vp_F_BFu0c  {
  void *v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Vp_F_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Vp_F_BFu0c()
{
  {
    init_simple_test("Vp_F_BFu0c");
    static STRUCT_IF_C Vp_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_F_BFu0c, Vp_F_BFu0c)
//============================================================================


struct  Vp_F_BFu0i  {
  void *v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Vp_F_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Vp_F_BFu0i()
{
  {
    init_simple_test("Vp_F_BFu0i");
    static STRUCT_IF_C Vp_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_F_BFu0i, Vp_F_BFu0i)
//============================================================================


struct  Vp_F_BFu0ll  {
  void *v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Vp_F_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Vp_F_BFu0ll()
{
  {
    init_simple_test("Vp_F_BFu0ll");
    static STRUCT_IF_C Vp_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_F_BFu0ll, Vp_F_BFu0ll)
//============================================================================


struct  Vp_F_BFu0s  {
  void *v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Vp_F_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Vp_F_BFu0s()
{
  {
    init_simple_test("Vp_F_BFu0s");
    static STRUCT_IF_C Vp_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_F_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_F_BFu0s, Vp_F_BFu0s)
//============================================================================


struct  Vp_I_BFu0c  {
  void *v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Vp_I_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Vp_I_BFu0c()
{
  {
    init_simple_test("Vp_I_BFu0c");
    static STRUCT_IF_C Vp_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_I_BFu0c, Vp_I_BFu0c)
//============================================================================


struct  Vp_I_BFu0i  {
  void *v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Vp_I_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Vp_I_BFu0i()
{
  {
    init_simple_test("Vp_I_BFu0i");
    static STRUCT_IF_C Vp_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_I_BFu0i, Vp_I_BFu0i)
//============================================================================


struct  Vp_I_BFu0ll  {
  void *v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Vp_I_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Vp_I_BFu0ll()
{
  {
    init_simple_test("Vp_I_BFu0ll");
    static STRUCT_IF_C Vp_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_I_BFu0ll, Vp_I_BFu0ll)
//============================================================================


struct  Vp_I_BFu0s  {
  void *v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Vp_I_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Vp_I_BFu0s()
{
  {
    init_simple_test("Vp_I_BFu0s");
    static STRUCT_IF_C Vp_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_I_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_I_BFu0s, Vp_I_BFu0s)
//============================================================================


struct  Vp_Ip_BFu0c  {
  void *v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Vp_Ip_BFu0c) C1{ Fp[2] Fc:0}



static void Test_Vp_Ip_BFu0c()
{
  {
    init_simple_test("Vp_Ip_BFu0c");
    static STRUCT_IF_C Vp_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ip_BFu0c, Vp_Ip_BFu0c)
//============================================================================


struct  Vp_Ip_BFu0i  {
  void *v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Vp_Ip_BFu0i) C1{ Fp[2] Fi:0}



static void Test_Vp_Ip_BFu0i()
{
  {
    init_simple_test("Vp_Ip_BFu0i");
    static STRUCT_IF_C Vp_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ip_BFu0i, Vp_Ip_BFu0i)
//============================================================================


struct  Vp_Ip_BFu0ll  {
  void *v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Vp_Ip_BFu0ll) C1{ Fp[2] FL:0}



static void Test_Vp_Ip_BFu0ll()
{
  {
    init_simple_test("Vp_Ip_BFu0ll");
    static STRUCT_IF_C Vp_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ip_BFu0ll, Vp_Ip_BFu0ll)
//============================================================================


struct  Vp_Ip_BFu0s  {
  void *v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Vp_Ip_BFu0s) C1{ Fp[2] Fs:0}



static void Test_Vp_Ip_BFu0s()
{
  {
    init_simple_test("Vp_Ip_BFu0s");
    static STRUCT_IF_C Vp_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ip_BFu0s, Vp_Ip_BFu0s)
//============================================================================


struct  Vp_L_BFu0c  {
  void *v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Vp_L_BFu0c) C1{ Fp FL Fc:0}



static void Test_Vp_L_BFu0c()
{
  {
    init_simple_test("Vp_L_BFu0c");
    static STRUCT_IF_C Vp_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_L_BFu0c, Vp_L_BFu0c)
//============================================================================


struct  Vp_L_BFu0i  {
  void *v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Vp_L_BFu0i) C1{ Fp FL Fi:0}



static void Test_Vp_L_BFu0i()
{
  {
    init_simple_test("Vp_L_BFu0i");
    static STRUCT_IF_C Vp_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_L_BFu0i, Vp_L_BFu0i)
//============================================================================


struct  Vp_L_BFu0ll  {
  void *v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Vp_L_BFu0ll) C1{ Fp FL FL:0}



static void Test_Vp_L_BFu0ll()
{
  {
    init_simple_test("Vp_L_BFu0ll");
    static STRUCT_IF_C Vp_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_L_BFu0ll, Vp_L_BFu0ll)
//============================================================================


struct  Vp_L_BFu0s  {
  void *v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Vp_L_BFu0s) C1{ Fp FL Fs:0}



static void Test_Vp_L_BFu0s()
{
  {
    init_simple_test("Vp_L_BFu0s");
    static STRUCT_IF_C Vp_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_L_BFu0s, Vp_L_BFu0s)
//============================================================================


struct  Vp_S_BFu0c  {
  void *v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Vp_S_BFu0c) C1{ Fp Fs Fc:0}



static void Test_Vp_S_BFu0c()
{
  {
    init_simple_test("Vp_S_BFu0c");
    static STRUCT_IF_C Vp_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_S_BFu0c, Vp_S_BFu0c)
//============================================================================


struct  Vp_S_BFu0i  {
  void *v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Vp_S_BFu0i) C1{ Fp Fs Fi:0}



static void Test_Vp_S_BFu0i()
{
  {
    init_simple_test("Vp_S_BFu0i");
    static STRUCT_IF_C Vp_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_S_BFu0i, Vp_S_BFu0i)
//============================================================================


struct  Vp_S_BFu0ll  {
  void *v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Vp_S_BFu0ll) C1{ Fp Fs FL:0}



static void Test_Vp_S_BFu0ll()
{
  {
    init_simple_test("Vp_S_BFu0ll");
    static STRUCT_IF_C Vp_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_S_BFu0ll, Vp_S_BFu0ll)
//============================================================================


struct  Vp_S_BFu0s  {
  void *v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Vp_S_BFu0s) C1{ Fp Fs Fs:0}



static void Test_Vp_S_BFu0s()
{
  {
    init_simple_test("Vp_S_BFu0s");
    static STRUCT_IF_C Vp_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_S_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_S_BFu0s, Vp_S_BFu0s)
//============================================================================


struct  Vp_Uc_BFu0c  {
  void *v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Vp_Uc_BFu0c) C1{ Fp Fc Fc:0}



static void Test_Vp_Uc_BFu0c()
{
  {
    init_simple_test("Vp_Uc_BFu0c");
    static STRUCT_IF_C Vp_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Uc_BFu0c, Vp_Uc_BFu0c)
//============================================================================


struct  Vp_Uc_BFu0i  {
  void *v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Vp_Uc_BFu0i) C1{ Fp Fc Fi:0}



static void Test_Vp_Uc_BFu0i()
{
  {
    init_simple_test("Vp_Uc_BFu0i");
    static STRUCT_IF_C Vp_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Uc_BFu0i, Vp_Uc_BFu0i)
//============================================================================


struct  Vp_Uc_BFu0ll  {
  void *v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Vp_Uc_BFu0ll) C1{ Fp Fc FL:0}



static void Test_Vp_Uc_BFu0ll()
{
  {
    init_simple_test("Vp_Uc_BFu0ll");
    static STRUCT_IF_C Vp_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Uc_BFu0ll, Vp_Uc_BFu0ll)
//============================================================================


struct  Vp_Uc_BFu0s  {
  void *v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Vp_Uc_BFu0s) C1{ Fp Fc Fs:0}



static void Test_Vp_Uc_BFu0s()
{
  {
    init_simple_test("Vp_Uc_BFu0s");
    static STRUCT_IF_C Vp_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Uc_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Uc_BFu0s, Vp_Uc_BFu0s)
//============================================================================


struct  Vp_Ui_BFu0c  {
  void *v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Vp_Ui_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Vp_Ui_BFu0c()
{
  {
    init_simple_test("Vp_Ui_BFu0c");
    static STRUCT_IF_C Vp_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ui_BFu0c, Vp_Ui_BFu0c)
//============================================================================


struct  Vp_Ui_BFu0i  {
  void *v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Vp_Ui_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Vp_Ui_BFu0i()
{
  {
    init_simple_test("Vp_Ui_BFu0i");
    static STRUCT_IF_C Vp_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ui_BFu0i, Vp_Ui_BFu0i)
//============================================================================


struct  Vp_Ui_BFu0ll  {
  void *v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Vp_Ui_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Vp_Ui_BFu0ll()
{
  {
    init_simple_test("Vp_Ui_BFu0ll");
    static STRUCT_IF_C Vp_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ui_BFu0ll, Vp_Ui_BFu0ll)
//============================================================================


struct  Vp_Ui_BFu0s  {
  void *v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Vp_Ui_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Vp_Ui_BFu0s()
{
  {
    init_simple_test("Vp_Ui_BFu0s");
    static STRUCT_IF_C Vp_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Ui_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ui_BFu0s, Vp_Ui_BFu0s)
//============================================================================


struct  Vp_Ul_BFu0c  {
  void *v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Vp_Ul_BFu0c) C1{ Fp FL Fc:0}



static void Test_Vp_Ul_BFu0c()
{
  {
    init_simple_test("Vp_Ul_BFu0c");
    static STRUCT_IF_C Vp_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ul_BFu0c, Vp_Ul_BFu0c)
//============================================================================


struct  Vp_Ul_BFu0i  {
  void *v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Vp_Ul_BFu0i) C1{ Fp FL Fi:0}



static void Test_Vp_Ul_BFu0i()
{
  {
    init_simple_test("Vp_Ul_BFu0i");
    static STRUCT_IF_C Vp_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ul_BFu0i, Vp_Ul_BFu0i)
//============================================================================


struct  Vp_Ul_BFu0ll  {
  void *v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Vp_Ul_BFu0ll) C1{ Fp FL FL:0}



static void Test_Vp_Ul_BFu0ll()
{
  {
    init_simple_test("Vp_Ul_BFu0ll");
    static STRUCT_IF_C Vp_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ul_BFu0ll, Vp_Ul_BFu0ll)
//============================================================================


struct  Vp_Ul_BFu0s  {
  void *v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Vp_Ul_BFu0s) C1{ Fp FL Fs:0}



static void Test_Vp_Ul_BFu0s()
{
  {
    init_simple_test("Vp_Ul_BFu0s");
    static STRUCT_IF_C Vp_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Vp_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Ul_BFu0s, Vp_Ul_BFu0s)
//============================================================================


struct  Vp_Us_BFu0c  {
  void *v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Vp_Us_BFu0c) C1{ Fp Fs Fc:0}



static void Test_Vp_Us_BFu0c()
{
  {
    init_simple_test("Vp_Us_BFu0c");
    static STRUCT_IF_C Vp_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Us_BFu0c, Vp_Us_BFu0c)
//============================================================================


struct  Vp_Us_BFu0i  {
  void *v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Vp_Us_BFu0i) C1{ Fp Fs Fi:0}



static void Test_Vp_Us_BFu0i()
{
  {
    init_simple_test("Vp_Us_BFu0i");
    static STRUCT_IF_C Vp_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Us_BFu0i, Vp_Us_BFu0i)
//============================================================================


struct  Vp_Us_BFu0ll  {
  void *v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Vp_Us_BFu0ll) C1{ Fp Fs FL:0}



static void Test_Vp_Us_BFu0ll()
{
  {
    init_simple_test("Vp_Us_BFu0ll");
    static STRUCT_IF_C Vp_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Us_BFu0ll, Vp_Us_BFu0ll)
//============================================================================


struct  Vp_Us_BFu0s  {
  void *v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Vp_Us_BFu0s) C1{ Fp Fs Fs:0}



static void Test_Vp_Us_BFu0s()
{
  {
    init_simple_test("Vp_Us_BFu0s");
    static STRUCT_IF_C Vp_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Us_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Us_BFu0s, Vp_Us_BFu0s)
//============================================================================


struct  Vp_Vp_BFu0c  {
  void *v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Vp_Vp_BFu0c) C1{ Fp[2] Fc:0}



static void Test_Vp_Vp_BFu0c()
{
  {
    init_simple_test("Vp_Vp_BFu0c");
    static STRUCT_IF_C Vp_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Vp_BFu0c, Vp_Vp_BFu0c)
//============================================================================


struct  Vp_Vp_BFu0i  {
  void *v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Vp_Vp_BFu0i) C1{ Fp[2] Fi:0}



static void Test_Vp_Vp_BFu0i()
{
  {
    init_simple_test("Vp_Vp_BFu0i");
    static STRUCT_IF_C Vp_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Vp_BFu0i, Vp_Vp_BFu0i)
//============================================================================


struct  Vp_Vp_BFu0ll  {
  void *v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Vp_Vp_BFu0ll) C1{ Fp[2] FL:0}



static void Test_Vp_Vp_BFu0ll()
{
  {
    init_simple_test("Vp_Vp_BFu0ll");
    static STRUCT_IF_C Vp_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Vp_BFu0ll, Vp_Vp_BFu0ll)
//============================================================================


struct  Vp_Vp_BFu0s  {
  void *v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Vp_Vp_BFu0s) C1{ Fp[2] Fs:0}



static void Test_Vp_Vp_BFu0s()
{
  {
    init_simple_test("Vp_Vp_BFu0s");
    static STRUCT_IF_C Vp_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Vp_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Vp_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Vp_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Vp_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Vp_Vp_BFu0s, Vp_Vp_BFu0s)
//============================================================================

