// 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  BFu8s_Ui_BFu0c  {
  unsigned short v1:8;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu8s_Ui_BFu0c) C1{ Fs:8 Fi Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9i_BFu0c_Ip  {
  unsigned int v1:9;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu9i_BFu0c_Ip) C1{ Fi:9 Fc:0 Fp}



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9i_BFu0c_Vp  {
  unsigned int v1:9;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu9i_BFu0c_Vp) C1{ Fi:9 Fc:0 Fp}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9i_Ip_BFu0c  {
  unsigned int v1:9;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu9i_Ip_BFu0c) C1{ Fi:9 Fp Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu9i_Vp_BFu0c  {
  unsigned int v1:9;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu9i_Vp_BFu0c) C1{ Fi:9 Fp Fc:0}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu9ll_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu0c, BFu9ll_BFu0i_BFu0c)
//============================================================================


struct  BFu9ll_BFu0i_BFu0i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu0i_BFu0i) C1{ FL:9 Fi:0 Fi:0}



static void Test_BFu9ll_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu0i, BFu9ll_BFu0i_BFu0i)
//============================================================================


struct  BFu9ll_BFu0i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu0i_BFu0ll) C1{ FL:9 Fi:0 FL:0}



static void Test_BFu9ll_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu0ll, BFu9ll_BFu0i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu0s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu0i_BFu0s) C1{ FL:9 Fi:0 Fs:0}



static void Test_BFu9ll_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu0s, BFu9ll_BFu0i_BFu0s)
//============================================================================


struct  BFu9ll_BFu0i_BFu15i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9ll_BFu0i_BFu15i) C1{ FL:9 Fi:0 Fi:15}



static void Test_BFu9ll_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu15i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu9ll_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu15i, BFu9ll_BFu0i_BFu15i)
//============================================================================


struct  BFu9ll_BFu0i_BFu15ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9ll_BFu0i_BFu15ll) C1{ FL:9 Fi:0 FL:15}



static void Test_BFu9ll_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu15ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu9ll_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu15ll, BFu9ll_BFu0i_BFu15ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu15s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9ll_BFu0i_BFu15s) C1{ FL:9 Fi:0 Fs:15}



static void Test_BFu9ll_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu15s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu9ll_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu15s, BFu9ll_BFu0i_BFu15s)
//============================================================================


struct  BFu9ll_BFu0i_BFu16i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9ll_BFu0i_BFu16i) C1{ FL:9 Fi:0 Fi:16}



static void Test_BFu9ll_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu16i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu9ll_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu16i, BFu9ll_BFu0i_BFu16i)
//============================================================================


struct  BFu9ll_BFu0i_BFu16ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9ll_BFu0i_BFu16ll) C1{ FL:9 Fi:0 FL:16}



static void Test_BFu9ll_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu16ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu9ll_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu16ll, BFu9ll_BFu0i_BFu16ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu16s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9ll_BFu0i_BFu16s) C1{ FL:9 Fi:0 Fs:16}



static void Test_BFu9ll_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu16s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu9ll_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu16s, BFu9ll_BFu0i_BFu16s)
//============================================================================


struct  BFu9ll_BFu0i_BFu17i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9ll_BFu0i_BFu17i) C1{ FL:9 Fi:0 Fi:17}



static void Test_BFu9ll_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu17i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9ll_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9ll_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu17i, BFu9ll_BFu0i_BFu17i)
//============================================================================


struct  BFu9ll_BFu0i_BFu17ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9ll_BFu0i_BFu17ll) C1{ FL:9 Fi:0 FL:17}



static void Test_BFu9ll_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu17ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9ll_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9ll_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu17ll, BFu9ll_BFu0i_BFu17ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu1c  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9ll_BFu0i_BFu1c) C1{ FL:9 Fi:0 Fc:1}



static void Test_BFu9ll_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu1c");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9ll_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu1c, BFu9ll_BFu0i_BFu1c)
//============================================================================


struct  BFu9ll_BFu0i_BFu1i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9ll_BFu0i_BFu1i) C1{ FL:9 Fi:0 Fi:1}



static void Test_BFu9ll_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu1i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9ll_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu1i, BFu9ll_BFu0i_BFu1i)
//============================================================================


struct  BFu9ll_BFu0i_BFu1ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9ll_BFu0i_BFu1ll) C1{ FL:9 Fi:0 FL:1}



static void Test_BFu9ll_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu1ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9ll_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu1ll, BFu9ll_BFu0i_BFu1ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu1s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9ll_BFu0i_BFu1s) C1{ FL:9 Fi:0 Fs:1}



static void Test_BFu9ll_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu1s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9ll_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu1s, BFu9ll_BFu0i_BFu1s)
//============================================================================


struct  BFu9ll_BFu0i_BFu31i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9ll_BFu0i_BFu31i) C1{ FL:9 Fi:0 Fi:31}



static void Test_BFu9ll_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu31i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu31i, BFu9ll_BFu0i_BFu31i)
//============================================================================


struct  BFu9ll_BFu0i_BFu31ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9ll_BFu0i_BFu31ll) C1{ FL:9 Fi:0 FL:31}



static void Test_BFu9ll_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu31ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu31ll, BFu9ll_BFu0i_BFu31ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu32i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9ll_BFu0i_BFu32i) C1{ FL:9 Fi:0 Fi:32}



static void Test_BFu9ll_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu32i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu32i, BFu9ll_BFu0i_BFu32i)
//============================================================================


struct  BFu9ll_BFu0i_BFu32ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9ll_BFu0i_BFu32ll) C1{ FL:9 Fi:0 FL:32}



static void Test_BFu9ll_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu32ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu32ll, BFu9ll_BFu0i_BFu32ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu33  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9ll_BFu0i_BFu33) C1{ FL:9 Fi:0 FL:33}



static void Test_BFu9ll_BFu0i_BFu33()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu33");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu9ll_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9ll_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu33, BFu9ll_BFu0i_BFu33)
//============================================================================


struct  BFu9ll_BFu0i_BFu7c  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9ll_BFu0i_BFu7c) C1{ FL:9 Fi:0 Fc:7}



static void Test_BFu9ll_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu7c");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9ll_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu7c, BFu9ll_BFu0i_BFu7c)
//============================================================================


struct  BFu9ll_BFu0i_BFu7i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9ll_BFu0i_BFu7i) C1{ FL:9 Fi:0 Fi:7}



static void Test_BFu9ll_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu7i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9ll_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu7i, BFu9ll_BFu0i_BFu7i)
//============================================================================


struct  BFu9ll_BFu0i_BFu7ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9ll_BFu0i_BFu7ll) C1{ FL:9 Fi:0 FL:7}



static void Test_BFu9ll_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu7ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9ll_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu7ll, BFu9ll_BFu0i_BFu7ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu7s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9ll_BFu0i_BFu7s) C1{ FL:9 Fi:0 Fs:7}



static void Test_BFu9ll_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu7s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9ll_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu7s, BFu9ll_BFu0i_BFu7s)
//============================================================================


struct  BFu9ll_BFu0i_BFu8c  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9ll_BFu0i_BFu8c) C1{ FL:9 Fi:0 Fc:8}



static void Test_BFu9ll_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu8c");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9ll_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu8c, BFu9ll_BFu0i_BFu8c)
//============================================================================


struct  BFu9ll_BFu0i_BFu8i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9ll_BFu0i_BFu8i) C1{ FL:9 Fi:0 Fi:8}



static void Test_BFu9ll_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu8i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9ll_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu8i, BFu9ll_BFu0i_BFu8i)
//============================================================================


struct  BFu9ll_BFu0i_BFu8ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9ll_BFu0i_BFu8ll) C1{ FL:9 Fi:0 FL:8}



static void Test_BFu9ll_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu8ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9ll_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu8ll, BFu9ll_BFu0i_BFu8ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu8s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9ll_BFu0i_BFu8s) C1{ FL:9 Fi:0 Fs:8}



static void Test_BFu9ll_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu8s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9ll_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu8s, BFu9ll_BFu0i_BFu8s)
//============================================================================


struct  BFu9ll_BFu0i_BFu9i  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9ll_BFu0i_BFu9i) C1{ FL:9 Fi:0 Fi:9}



static void Test_BFu9ll_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu9i");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu9ll_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu9i, BFu9ll_BFu0i_BFu9i)
//============================================================================


struct  BFu9ll_BFu0i_BFu9ll  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9ll_BFu0i_BFu9ll) C1{ FL:9 Fi:0 FL:9}



static void Test_BFu9ll_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu9ll");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu9ll_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu9ll, BFu9ll_BFu0i_BFu9ll)
//============================================================================


struct  BFu9ll_BFu0i_BFu9s  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9ll_BFu0i_BFu9s) C1{ FL:9 Fi:0 Fs:9}



static void Test_BFu9ll_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu9ll_BFu0i_BFu9s");
    static STRUCT_IF_C BFu9ll_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu9ll_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_BFu9s, BFu9ll_BFu0i_BFu9s)
//============================================================================


struct  BFu9ll_BFu0i_C  {
  __tsu64 v1:9;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu9ll_BFu0i_C) C1{ FL:9 Fi:0 Fc}



static void Test_BFu9ll_BFu0i_C()
{
  {
    init_simple_test("BFu9ll_BFu0i_C");
    static STRUCT_IF_C BFu9ll_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_C, BFu9ll_BFu0i_C)
//============================================================================


struct  BFu9ll_BFu0i_D  {
  __tsu64 v1:9;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu9ll_BFu0i_D) C1{ FL:9 Fi:0 FL}



static void Test_BFu9ll_BFu0i_D()
{
  {
    init_simple_test("BFu9ll_BFu0i_D");
    static STRUCT_IF_C BFu9ll_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_D, BFu9ll_BFu0i_D)
//============================================================================


struct  BFu9ll_BFu0i_F  {
  __tsu64 v1:9;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu9ll_BFu0i_F) C1{ FL:9 Fi:0 Fi}



static void Test_BFu9ll_BFu0i_F()
{
  {
    init_simple_test("BFu9ll_BFu0i_F");
    static STRUCT_IF_C BFu9ll_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_F, BFu9ll_BFu0i_F)
//============================================================================


struct  BFu9ll_BFu0i_I  {
  __tsu64 v1:9;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu9ll_BFu0i_I) C1{ FL:9 Fi:0 Fi}



static void Test_BFu9ll_BFu0i_I()
{
  {
    init_simple_test("BFu9ll_BFu0i_I");
    static STRUCT_IF_C BFu9ll_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_I, BFu9ll_BFu0i_I)
//============================================================================


struct  BFu9ll_BFu0i_Ip  {
  __tsu64 v1:9;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu9ll_BFu0i_Ip) C1{ FL:9 Fi:0 Fp}



static void Test_BFu9ll_BFu0i_Ip()
{
  {
    init_simple_test("BFu9ll_BFu0i_Ip");
    static STRUCT_IF_C BFu9ll_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_Ip, BFu9ll_BFu0i_Ip)
//============================================================================


struct  BFu9ll_BFu0i_L  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu9ll_BFu0i_L) C1{ FL:9 Fi:0 FL}



static void Test_BFu9ll_BFu0i_L()
{
  {
    init_simple_test("BFu9ll_BFu0i_L");
    static STRUCT_IF_C BFu9ll_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_L, BFu9ll_BFu0i_L)
//============================================================================


struct  BFu9ll_BFu0i_S  {
  __tsu64 v1:9;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu9ll_BFu0i_S) C1{ FL:9 Fi:0 Fs}



static void Test_BFu9ll_BFu0i_S()
{
  {
    init_simple_test("BFu9ll_BFu0i_S");
    static STRUCT_IF_C BFu9ll_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_S, BFu9ll_BFu0i_S)
//============================================================================


struct  BFu9ll_BFu0i_Uc  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu9ll_BFu0i_Uc) C1{ FL:9 Fi:0 Fc}



static void Test_BFu9ll_BFu0i_Uc()
{
  {
    init_simple_test("BFu9ll_BFu0i_Uc");
    static STRUCT_IF_C BFu9ll_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_Uc, BFu9ll_BFu0i_Uc)
//============================================================================


struct  BFu9ll_BFu0i_Ui  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu9ll_BFu0i_Ui) C1{ FL:9 Fi:0 Fi}



static void Test_BFu9ll_BFu0i_Ui()
{
  {
    init_simple_test("BFu9ll_BFu0i_Ui");
    static STRUCT_IF_C BFu9ll_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_Ui, BFu9ll_BFu0i_Ui)
//============================================================================


struct  BFu9ll_BFu0i_Ul  {
  __tsu64 v1:9;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu9ll_BFu0i_Ul) C1{ FL:9 Fi:0 FL}



static void Test_BFu9ll_BFu0i_Ul()
{
  {
    init_simple_test("BFu9ll_BFu0i_Ul");
    static STRUCT_IF_C BFu9ll_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_Ul, BFu9ll_BFu0i_Ul)
//============================================================================


struct  BFu9ll_BFu0i_Us  {
  __tsu64 v1:9;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu9ll_BFu0i_Us) C1{ FL:9 Fi:0 Fs}



static void Test_BFu9ll_BFu0i_Us()
{
  {
    init_simple_test("BFu9ll_BFu0i_Us");
    static STRUCT_IF_C BFu9ll_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_Us, BFu9ll_BFu0i_Us)
//============================================================================


struct  BFu9ll_BFu0i_Vp  {
  __tsu64 v1:9;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu9ll_BFu0i_Vp) C1{ FL:9 Fi:0 Fp}



static void Test_BFu9ll_BFu0i_Vp()
{
  {
    init_simple_test("BFu9ll_BFu0i_Vp");
    static STRUCT_IF_C BFu9ll_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0i_Vp, BFu9ll_BFu0i_Vp)
//============================================================================


struct  BFu9ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu0ll) C1{ FL:9 FL:0}



static void Test_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll, BFu9ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu0ll_BFu0c) C1{ FL:9 FL:0 Fc:0}



static void Test_BFu9ll_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu0c, BFu9ll_BFu0ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu0ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu0ll_BFu0i) C1{ FL:9 FL:0 Fi:0}



static void Test_BFu9ll_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu0i, BFu9ll_BFu0ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu0ll_BFu0ll) C1{ FL:9 FL:0 FL:0}



static void Test_BFu9ll_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu0ll, BFu9ll_BFu0ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu0ll_BFu0s) C1{ FL:9 FL:0 Fs:0}



static void Test_BFu9ll_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu0s, BFu9ll_BFu0ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu0ll_BFu15i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9ll_BFu0ll_BFu15i) C1{ FL:9 FL:0 Fi:15}



static void Test_BFu9ll_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu15i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu9ll_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu15i, BFu9ll_BFu0ll_BFu15i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu15ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9ll_BFu0ll_BFu15ll) C1{ FL:9 FL:0 FL:15}



static void Test_BFu9ll_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu15ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu9ll_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu15ll, BFu9ll_BFu0ll_BFu15ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu15s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9ll_BFu0ll_BFu15s) C1{ FL:9 FL:0 Fs:15}



static void Test_BFu9ll_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu15s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu9ll_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu15s, BFu9ll_BFu0ll_BFu15s)
//============================================================================


struct  BFu9ll_BFu0ll_BFu16i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9ll_BFu0ll_BFu16i) C1{ FL:9 FL:0 Fi:16}



static void Test_BFu9ll_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu16i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu9ll_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu16i, BFu9ll_BFu0ll_BFu16i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu16ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9ll_BFu0ll_BFu16ll) C1{ FL:9 FL:0 FL:16}



static void Test_BFu9ll_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu16ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu9ll_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu16ll, BFu9ll_BFu0ll_BFu16ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu16s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9ll_BFu0ll_BFu16s) C1{ FL:9 FL:0 Fs:16}



static void Test_BFu9ll_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu16s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu9ll_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu16s, BFu9ll_BFu0ll_BFu16s)
//============================================================================


struct  BFu9ll_BFu0ll_BFu17i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9ll_BFu0ll_BFu17i) C1{ FL:9 FL:0 Fi:17}



static void Test_BFu9ll_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu17i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu9ll_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu9ll_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu17i, BFu9ll_BFu0ll_BFu17i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu17ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9ll_BFu0ll_BFu17ll) C1{ FL:9 FL:0 FL:17}



static void Test_BFu9ll_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu17ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu9ll_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu9ll_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu17ll, BFu9ll_BFu0ll_BFu17ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu1c  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9ll_BFu0ll_BFu1c) C1{ FL:9 FL:0 Fc:1}



static void Test_BFu9ll_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu1c");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9ll_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu1c, BFu9ll_BFu0ll_BFu1c)
//============================================================================


struct  BFu9ll_BFu0ll_BFu1i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9ll_BFu0ll_BFu1i) C1{ FL:9 FL:0 Fi:1}



static void Test_BFu9ll_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu1i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9ll_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu1i, BFu9ll_BFu0ll_BFu1i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu1ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9ll_BFu0ll_BFu1ll) C1{ FL:9 FL:0 FL:1}



static void Test_BFu9ll_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu1ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9ll_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu1ll, BFu9ll_BFu0ll_BFu1ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu1s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9ll_BFu0ll_BFu1s) C1{ FL:9 FL:0 Fs:1}



static void Test_BFu9ll_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu1s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9ll_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu1s, BFu9ll_BFu0ll_BFu1s)
//============================================================================


struct  BFu9ll_BFu0ll_BFu31i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9ll_BFu0ll_BFu31i) C1{ FL:9 FL:0 Fi:31}



static void Test_BFu9ll_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu31i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu9ll_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu31i, BFu9ll_BFu0ll_BFu31i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu31ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9ll_BFu0ll_BFu31ll) C1{ FL:9 FL:0 FL:31}



static void Test_BFu9ll_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu31ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu9ll_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu31ll, BFu9ll_BFu0ll_BFu31ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu32i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9ll_BFu0ll_BFu32i) C1{ FL:9 FL:0 Fi:32}



static void Test_BFu9ll_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu32i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu9ll_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu32i, BFu9ll_BFu0ll_BFu32i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu32ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9ll_BFu0ll_BFu32ll) C1{ FL:9 FL:0 FL:32}



static void Test_BFu9ll_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu32ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu9ll_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu32ll, BFu9ll_BFu0ll_BFu32ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu33  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9ll_BFu0ll_BFu33) C1{ FL:9 FL:0 FL:33}



static void Test_BFu9ll_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu33");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu9ll_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9ll_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu33, BFu9ll_BFu0ll_BFu33)
//============================================================================


struct  BFu9ll_BFu0ll_BFu7c  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9ll_BFu0ll_BFu7c) C1{ FL:9 FL:0 Fc:7}



static void Test_BFu9ll_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu7c");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9ll_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu7c, BFu9ll_BFu0ll_BFu7c)
//============================================================================


struct  BFu9ll_BFu0ll_BFu7i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9ll_BFu0ll_BFu7i) C1{ FL:9 FL:0 Fi:7}



static void Test_BFu9ll_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu7i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9ll_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu7i, BFu9ll_BFu0ll_BFu7i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu7ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9ll_BFu0ll_BFu7ll) C1{ FL:9 FL:0 FL:7}



static void Test_BFu9ll_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu7ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9ll_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu7ll, BFu9ll_BFu0ll_BFu7ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu7s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9ll_BFu0ll_BFu7s) C1{ FL:9 FL:0 Fs:7}



static void Test_BFu9ll_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu7s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9ll_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu7s, BFu9ll_BFu0ll_BFu7s)
//============================================================================


struct  BFu9ll_BFu0ll_BFu8c  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9ll_BFu0ll_BFu8c) C1{ FL:9 FL:0 Fc:8}



static void Test_BFu9ll_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu8c");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9ll_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu8c, BFu9ll_BFu0ll_BFu8c)
//============================================================================


struct  BFu9ll_BFu0ll_BFu8i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9ll_BFu0ll_BFu8i) C1{ FL:9 FL:0 Fi:8}



static void Test_BFu9ll_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu8i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9ll_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu8i, BFu9ll_BFu0ll_BFu8i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu8ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9ll_BFu0ll_BFu8ll) C1{ FL:9 FL:0 FL:8}



static void Test_BFu9ll_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu8ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9ll_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu8ll, BFu9ll_BFu0ll_BFu8ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu8s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9ll_BFu0ll_BFu8s) C1{ FL:9 FL:0 Fs:8}



static void Test_BFu9ll_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu8s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9ll_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu8s, BFu9ll_BFu0ll_BFu8s)
//============================================================================


struct  BFu9ll_BFu0ll_BFu9i  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9ll_BFu0ll_BFu9i) C1{ FL:9 FL:0 Fi:9}



static void Test_BFu9ll_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu9i");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu9ll_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu9i, BFu9ll_BFu0ll_BFu9i)
//============================================================================


struct  BFu9ll_BFu0ll_BFu9ll  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9ll_BFu0ll_BFu9ll) C1{ FL:9 FL:0 FL:9}



static void Test_BFu9ll_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu9ll");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu9ll_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu9ll, BFu9ll_BFu0ll_BFu9ll)
//============================================================================


struct  BFu9ll_BFu0ll_BFu9s  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9ll_BFu0ll_BFu9s) C1{ FL:9 FL:0 Fs:9}



static void Test_BFu9ll_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu9ll_BFu0ll_BFu9s");
    static STRUCT_IF_C BFu9ll_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu9ll_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_BFu9s, BFu9ll_BFu0ll_BFu9s)
//============================================================================


struct  BFu9ll_BFu0ll_C  {
  __tsu64 v1:9;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu9ll_BFu0ll_C) C1{ FL:9 FL:0 Fc}



static void Test_BFu9ll_BFu0ll_C()
{
  {
    init_simple_test("BFu9ll_BFu0ll_C");
    static STRUCT_IF_C BFu9ll_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_C, BFu9ll_BFu0ll_C)
//============================================================================


struct  BFu9ll_BFu0ll_D  {
  __tsu64 v1:9;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu9ll_BFu0ll_D) C1{ FL:9 FL:0 FL}



static void Test_BFu9ll_BFu0ll_D()
{
  {
    init_simple_test("BFu9ll_BFu0ll_D");
    static STRUCT_IF_C BFu9ll_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_D, BFu9ll_BFu0ll_D)
//============================================================================


struct  BFu9ll_BFu0ll_F  {
  __tsu64 v1:9;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu9ll_BFu0ll_F) C1{ FL:9 FL:0 Fi}



static void Test_BFu9ll_BFu0ll_F()
{
  {
    init_simple_test("BFu9ll_BFu0ll_F");
    static STRUCT_IF_C BFu9ll_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_F, BFu9ll_BFu0ll_F)
//============================================================================


struct  BFu9ll_BFu0ll_I  {
  __tsu64 v1:9;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu9ll_BFu0ll_I) C1{ FL:9 FL:0 Fi}



static void Test_BFu9ll_BFu0ll_I()
{
  {
    init_simple_test("BFu9ll_BFu0ll_I");
    static STRUCT_IF_C BFu9ll_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_I, BFu9ll_BFu0ll_I)
//============================================================================


struct  BFu9ll_BFu0ll_Ip  {
  __tsu64 v1:9;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu9ll_BFu0ll_Ip) C1{ FL:9 FL:0 Fp}



static void Test_BFu9ll_BFu0ll_Ip()
{
  {
    init_simple_test("BFu9ll_BFu0ll_Ip");
    static STRUCT_IF_C BFu9ll_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_Ip, BFu9ll_BFu0ll_Ip)
//============================================================================


struct  BFu9ll_BFu0ll_L  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu9ll_BFu0ll_L) C1{ FL:9 FL:0 FL}



static void Test_BFu9ll_BFu0ll_L()
{
  {
    init_simple_test("BFu9ll_BFu0ll_L");
    static STRUCT_IF_C BFu9ll_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_L, BFu9ll_BFu0ll_L)
//============================================================================


struct  BFu9ll_BFu0ll_S  {
  __tsu64 v1:9;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu9ll_BFu0ll_S) C1{ FL:9 FL:0 Fs}



static void Test_BFu9ll_BFu0ll_S()
{
  {
    init_simple_test("BFu9ll_BFu0ll_S");
    static STRUCT_IF_C BFu9ll_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_S, BFu9ll_BFu0ll_S)
//============================================================================


struct  BFu9ll_BFu0ll_Uc  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu9ll_BFu0ll_Uc) C1{ FL:9 FL:0 Fc}



static void Test_BFu9ll_BFu0ll_Uc()
{
  {
    init_simple_test("BFu9ll_BFu0ll_Uc");
    static STRUCT_IF_C BFu9ll_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_Uc, BFu9ll_BFu0ll_Uc)
//============================================================================


struct  BFu9ll_BFu0ll_Ui  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu9ll_BFu0ll_Ui) C1{ FL:9 FL:0 Fi}



static void Test_BFu9ll_BFu0ll_Ui()
{
  {
    init_simple_test("BFu9ll_BFu0ll_Ui");
    static STRUCT_IF_C BFu9ll_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_Ui, BFu9ll_BFu0ll_Ui)
//============================================================================


struct  BFu9ll_BFu0ll_Ul  {
  __tsu64 v1:9;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu9ll_BFu0ll_Ul) C1{ FL:9 FL:0 FL}



static void Test_BFu9ll_BFu0ll_Ul()
{
  {
    init_simple_test("BFu9ll_BFu0ll_Ul");
    static STRUCT_IF_C BFu9ll_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_Ul, BFu9ll_BFu0ll_Ul)
//============================================================================


struct  BFu9ll_BFu0ll_Us  {
  __tsu64 v1:9;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu9ll_BFu0ll_Us) C1{ FL:9 FL:0 Fs}



static void Test_BFu9ll_BFu0ll_Us()
{
  {
    init_simple_test("BFu9ll_BFu0ll_Us");
    static STRUCT_IF_C BFu9ll_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_Us, BFu9ll_BFu0ll_Us)
//============================================================================


struct  BFu9ll_BFu0ll_Vp  {
  __tsu64 v1:9;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu9ll_BFu0ll_Vp) C1{ FL:9 FL:0 Fp}



static void Test_BFu9ll_BFu0ll_Vp()
{
  {
    init_simple_test("BFu9ll_BFu0ll_Vp");
    static STRUCT_IF_C BFu9ll_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0ll_Vp, BFu9ll_BFu0ll_Vp)
//============================================================================


struct  BFu9ll_BFu0s  {
  __tsu64 v1:9;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu0s) C1{ FL:9 Fs:0}



static void Test_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s, BFu9ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu0s_BFu0c  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu0s_BFu0c) C1{ FL:9 Fs:0 Fc:0}



static void Test_BFu9ll_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu0c, BFu9ll_BFu0s_BFu0c)
//============================================================================


struct  BFu9ll_BFu0s_BFu0i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu0s_BFu0i) C1{ FL:9 Fs:0 Fi:0}



static void Test_BFu9ll_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu0i, BFu9ll_BFu0s_BFu0i)
//============================================================================


struct  BFu9ll_BFu0s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu0s_BFu0ll) C1{ FL:9 Fs:0 FL:0}



static void Test_BFu9ll_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu0ll, BFu9ll_BFu0s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu0s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu0s_BFu0s) C1{ FL:9 Fs:0 Fs:0}



static void Test_BFu9ll_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu0s, BFu9ll_BFu0s_BFu0s)
//============================================================================


struct  BFu9ll_BFu0s_BFu15i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9ll_BFu0s_BFu15i) C1{ FL:9 Fs:0 Fi:15}



static void Test_BFu9ll_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu15i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu15i, BFu9ll_BFu0s_BFu15i)
//============================================================================


struct  BFu9ll_BFu0s_BFu15ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9ll_BFu0s_BFu15ll) C1{ FL:9 Fs:0 FL:15}



static void Test_BFu9ll_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu15ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu15ll, BFu9ll_BFu0s_BFu15ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu15s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9ll_BFu0s_BFu15s) C1{ FL:9 Fs:0 Fs:15}



static void Test_BFu9ll_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu15s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu15s, BFu9ll_BFu0s_BFu15s)
//============================================================================


struct  BFu9ll_BFu0s_BFu16i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9ll_BFu0s_BFu16i) C1{ FL:9 Fs:0 Fi:16}



static void Test_BFu9ll_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu16i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu16i, BFu9ll_BFu0s_BFu16i)
//============================================================================


struct  BFu9ll_BFu0s_BFu16ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9ll_BFu0s_BFu16ll) C1{ FL:9 Fs:0 FL:16}



static void Test_BFu9ll_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu16ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu16ll, BFu9ll_BFu0s_BFu16ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu16s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9ll_BFu0s_BFu16s) C1{ FL:9 Fs:0 Fs:16}



static void Test_BFu9ll_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu16s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu16s, BFu9ll_BFu0s_BFu16s)
//============================================================================


struct  BFu9ll_BFu0s_BFu17i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9ll_BFu0s_BFu17i) C1{ FL:9 Fs:0 Fi:17}



static void Test_BFu9ll_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu17i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9ll_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9ll_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu17i, BFu9ll_BFu0s_BFu17i)
//============================================================================


struct  BFu9ll_BFu0s_BFu17ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9ll_BFu0s_BFu17ll) C1{ FL:9 Fs:0 FL:17}



static void Test_BFu9ll_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu17ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu9ll_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu9ll_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu17ll, BFu9ll_BFu0s_BFu17ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu1c  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9ll_BFu0s_BFu1c) C1{ FL:9 Fs:0 Fc:1}



static void Test_BFu9ll_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu1c");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9ll_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu1c, BFu9ll_BFu0s_BFu1c)
//============================================================================


struct  BFu9ll_BFu0s_BFu1i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9ll_BFu0s_BFu1i) C1{ FL:9 Fs:0 Fi:1}



static void Test_BFu9ll_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu1i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9ll_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu1i, BFu9ll_BFu0s_BFu1i)
//============================================================================


struct  BFu9ll_BFu0s_BFu1ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9ll_BFu0s_BFu1ll) C1{ FL:9 Fs:0 FL:1}



static void Test_BFu9ll_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu1ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9ll_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu1ll, BFu9ll_BFu0s_BFu1ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu1s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9ll_BFu0s_BFu1s) C1{ FL:9 Fs:0 Fs:1}



static void Test_BFu9ll_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu1s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9ll_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu1s, BFu9ll_BFu0s_BFu1s)
//============================================================================


struct  BFu9ll_BFu0s_BFu31i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9ll_BFu0s_BFu31i) C1{ FL:9 Fs:0 Fi:31}



static void Test_BFu9ll_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu31i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu31i, BFu9ll_BFu0s_BFu31i)
//============================================================================


struct  BFu9ll_BFu0s_BFu31ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9ll_BFu0s_BFu31ll) C1{ FL:9 Fs:0 FL:31}



static void Test_BFu9ll_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu31ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu9ll_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu31ll, BFu9ll_BFu0s_BFu31ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu32i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9ll_BFu0s_BFu32i) C1{ FL:9 Fs:0 Fi:32}



static void Test_BFu9ll_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu32i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu32i, BFu9ll_BFu0s_BFu32i)
//============================================================================


struct  BFu9ll_BFu0s_BFu32ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9ll_BFu0s_BFu32ll) C1{ FL:9 Fs:0 FL:32}



static void Test_BFu9ll_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu32ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu9ll_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu32ll, BFu9ll_BFu0s_BFu32ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu33  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9ll_BFu0s_BFu33) C1{ FL:9 Fs:0 FL:33}



static void Test_BFu9ll_BFu0s_BFu33()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu33");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu9ll_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu9ll_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu33, BFu9ll_BFu0s_BFu33)
//============================================================================


struct  BFu9ll_BFu0s_BFu7c  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9ll_BFu0s_BFu7c) C1{ FL:9 Fs:0 Fc:7}



static void Test_BFu9ll_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu7c");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9ll_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu7c, BFu9ll_BFu0s_BFu7c)
//============================================================================


struct  BFu9ll_BFu0s_BFu7i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9ll_BFu0s_BFu7i) C1{ FL:9 Fs:0 Fi:7}



static void Test_BFu9ll_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu7i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9ll_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu7i, BFu9ll_BFu0s_BFu7i)
//============================================================================


struct  BFu9ll_BFu0s_BFu7ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9ll_BFu0s_BFu7ll) C1{ FL:9 Fs:0 FL:7}



static void Test_BFu9ll_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu7ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9ll_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu7ll, BFu9ll_BFu0s_BFu7ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu7s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9ll_BFu0s_BFu7s) C1{ FL:9 Fs:0 Fs:7}



static void Test_BFu9ll_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu7s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9ll_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9ll_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu7s, BFu9ll_BFu0s_BFu7s)
//============================================================================


struct  BFu9ll_BFu0s_BFu8c  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9ll_BFu0s_BFu8c) C1{ FL:9 Fs:0 Fc:8}



static void Test_BFu9ll_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu8c");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu8c, BFu9ll_BFu0s_BFu8c)
//============================================================================


struct  BFu9ll_BFu0s_BFu8i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9ll_BFu0s_BFu8i) C1{ FL:9 Fs:0 Fi:8}



static void Test_BFu9ll_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu8i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu8i, BFu9ll_BFu0s_BFu8i)
//============================================================================


struct  BFu9ll_BFu0s_BFu8ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9ll_BFu0s_BFu8ll) C1{ FL:9 Fs:0 FL:8}



static void Test_BFu9ll_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu8ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu8ll, BFu9ll_BFu0s_BFu8ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu8s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9ll_BFu0s_BFu8s) C1{ FL:9 Fs:0 Fs:8}



static void Test_BFu9ll_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu8s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu8s, BFu9ll_BFu0s_BFu8s)
//============================================================================


struct  BFu9ll_BFu0s_BFu9i  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9ll_BFu0s_BFu9i) C1{ FL:9 Fs:0 Fi:9}



static void Test_BFu9ll_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu9i");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu9i, BFu9ll_BFu0s_BFu9i)
//============================================================================


struct  BFu9ll_BFu0s_BFu9ll  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9ll_BFu0s_BFu9ll) C1{ FL:9 Fs:0 FL:9}



static void Test_BFu9ll_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu9ll");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu9ll, BFu9ll_BFu0s_BFu9ll)
//============================================================================


struct  BFu9ll_BFu0s_BFu9s  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9ll_BFu0s_BFu9s) C1{ FL:9 Fs:0 Fs:9}



static void Test_BFu9ll_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu9ll_BFu0s_BFu9s");
    static STRUCT_IF_C BFu9ll_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_BFu9s, BFu9ll_BFu0s_BFu9s)
//============================================================================


struct  BFu9ll_BFu0s_C  {
  __tsu64 v1:9;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu9ll_BFu0s_C) C1{ FL:9 Fs:0 Fc}



static void Test_BFu9ll_BFu0s_C()
{
  {
    init_simple_test("BFu9ll_BFu0s_C");
    static STRUCT_IF_C BFu9ll_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu9ll_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_C, BFu9ll_BFu0s_C)
//============================================================================


struct  BFu9ll_BFu0s_D  {
  __tsu64 v1:9;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu9ll_BFu0s_D) C1{ FL:9 Fs:0 FL}



static void Test_BFu9ll_BFu0s_D()
{
  {
    init_simple_test("BFu9ll_BFu0s_D");
    static STRUCT_IF_C BFu9ll_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_D, BFu9ll_BFu0s_D)
//============================================================================


struct  BFu9ll_BFu0s_F  {
  __tsu64 v1:9;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu9ll_BFu0s_F) C1{ FL:9 Fs:0 Fi}



static void Test_BFu9ll_BFu0s_F()
{
  {
    init_simple_test("BFu9ll_BFu0s_F");
    static STRUCT_IF_C BFu9ll_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_F, BFu9ll_BFu0s_F)
//============================================================================


struct  BFu9ll_BFu0s_I  {
  __tsu64 v1:9;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu9ll_BFu0s_I) C1{ FL:9 Fs:0 Fi}



static void Test_BFu9ll_BFu0s_I()
{
  {
    init_simple_test("BFu9ll_BFu0s_I");
    static STRUCT_IF_C BFu9ll_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_I, BFu9ll_BFu0s_I)
//============================================================================


struct  BFu9ll_BFu0s_Ip  {
  __tsu64 v1:9;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu9ll_BFu0s_Ip) C1{ FL:9 Fs:0 Fp}



static void Test_BFu9ll_BFu0s_Ip()
{
  {
    init_simple_test("BFu9ll_BFu0s_Ip");
    static STRUCT_IF_C BFu9ll_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_Ip, BFu9ll_BFu0s_Ip)
//============================================================================


struct  BFu9ll_BFu0s_L  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu9ll_BFu0s_L) C1{ FL:9 Fs:0 FL}



static void Test_BFu9ll_BFu0s_L()
{
  {
    init_simple_test("BFu9ll_BFu0s_L");
    static STRUCT_IF_C BFu9ll_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_L, BFu9ll_BFu0s_L)
//============================================================================


struct  BFu9ll_BFu0s_S  {
  __tsu64 v1:9;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu9ll_BFu0s_S) C1{ FL:9 Fs:0 Fs}



static void Test_BFu9ll_BFu0s_S()
{
  {
    init_simple_test("BFu9ll_BFu0s_S");
    static STRUCT_IF_C BFu9ll_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu9ll_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_S, BFu9ll_BFu0s_S)
//============================================================================


struct  BFu9ll_BFu0s_Uc  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu9ll_BFu0s_Uc) C1{ FL:9 Fs:0 Fc}



static void Test_BFu9ll_BFu0s_Uc()
{
  {
    init_simple_test("BFu9ll_BFu0s_Uc");
    static STRUCT_IF_C BFu9ll_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu9ll_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_Uc, BFu9ll_BFu0s_Uc)
//============================================================================


struct  BFu9ll_BFu0s_Ui  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu9ll_BFu0s_Ui) C1{ FL:9 Fs:0 Fi}



static void Test_BFu9ll_BFu0s_Ui()
{
  {
    init_simple_test("BFu9ll_BFu0s_Ui");
    static STRUCT_IF_C BFu9ll_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu9ll_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_Ui, BFu9ll_BFu0s_Ui)
//============================================================================


struct  BFu9ll_BFu0s_Ul  {
  __tsu64 v1:9;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu9ll_BFu0s_Ul) C1{ FL:9 Fs:0 FL}



static void Test_BFu9ll_BFu0s_Ul()
{
  {
    init_simple_test("BFu9ll_BFu0s_Ul");
    static STRUCT_IF_C BFu9ll_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_Ul, BFu9ll_BFu0s_Ul)
//============================================================================


struct  BFu9ll_BFu0s_Us  {
  __tsu64 v1:9;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu9ll_BFu0s_Us) C1{ FL:9 Fs:0 Fs}



static void Test_BFu9ll_BFu0s_Us()
{
  {
    init_simple_test("BFu9ll_BFu0s_Us");
    static STRUCT_IF_C BFu9ll_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu9ll_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_Us, BFu9ll_BFu0s_Us)
//============================================================================


struct  BFu9ll_BFu0s_Vp  {
  __tsu64 v1:9;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu9ll_BFu0s_Vp) C1{ FL:9 Fs:0 Fp}



static void Test_BFu9ll_BFu0s_Vp()
{
  {
    init_simple_test("BFu9ll_BFu0s_Vp");
    static STRUCT_IF_C BFu9ll_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu0s_Vp, BFu9ll_BFu0s_Vp)
//============================================================================


struct  BFu9ll_BFu15i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu15i_BFu0c) C1{ FL:9 Fi:15 Fc:0}



static void Test_BFu9ll_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu15i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15i_BFu0c, BFu9ll_BFu15i_BFu0c)
//============================================================================


struct  BFu9ll_BFu15i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu15i_BFu0i) C1{ FL:9 Fi:15 Fi:0}



static void Test_BFu9ll_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu15i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15i_BFu0i, BFu9ll_BFu15i_BFu0i)
//============================================================================


struct  BFu9ll_BFu15i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu15i_BFu0ll) C1{ FL:9 Fi:15 FL:0}



static void Test_BFu9ll_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu15i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15i_BFu0ll, BFu9ll_BFu15i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu15i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu15i_BFu0s) C1{ FL:9 Fi:15 Fs:0}



static void Test_BFu9ll_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu15i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15i_BFu0s, BFu9ll_BFu15i_BFu0s)
//============================================================================


struct  BFu9ll_BFu15ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu15ll_BFu0c) C1{ FL:9 FL:15 Fc:0}



static void Test_BFu9ll_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu15ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15ll_BFu0c, BFu9ll_BFu15ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu15ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu15ll_BFu0i) C1{ FL:9 FL:15 Fi:0}



static void Test_BFu9ll_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu15ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15ll_BFu0i, BFu9ll_BFu15ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu15ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu15ll_BFu0ll) C1{ FL:9 FL:15 FL:0}



static void Test_BFu9ll_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu15ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15ll_BFu0ll, BFu9ll_BFu15ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu15ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu15ll_BFu0s) C1{ FL:9 FL:15 Fs:0}



static void Test_BFu9ll_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu15ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9ll_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9ll_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15ll_BFu0s, BFu9ll_BFu15ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu15s_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu15s_BFu0c) C1{ FL:9 Fs:15 Fc:0}



static void Test_BFu9ll_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu15s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15s_BFu0c, BFu9ll_BFu15s_BFu0c)
//============================================================================


struct  BFu9ll_BFu15s_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu15s_BFu0i) C1{ FL:9 Fs:15 Fi:0}



static void Test_BFu9ll_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu15s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15s_BFu0i, BFu9ll_BFu15s_BFu0i)
//============================================================================


struct  BFu9ll_BFu15s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu15s_BFu0ll) C1{ FL:9 Fs:15 FL:0}



static void Test_BFu9ll_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu15s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15s_BFu0ll, BFu9ll_BFu15s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu15s_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu15s_BFu0s) C1{ FL:9 Fs:15 Fs:0}



static void Test_BFu9ll_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu15s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9ll_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9ll_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu15s_BFu0s, BFu9ll_BFu15s_BFu0s)
//============================================================================


struct  BFu9ll_BFu16i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu16i_BFu0c) C1{ FL:9 Fi:16 Fc:0}



static void Test_BFu9ll_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu16i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16i_BFu0c, BFu9ll_BFu16i_BFu0c)
//============================================================================


struct  BFu9ll_BFu16i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu16i_BFu0i) C1{ FL:9 Fi:16 Fi:0}



static void Test_BFu9ll_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu16i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16i_BFu0i, BFu9ll_BFu16i_BFu0i)
//============================================================================


struct  BFu9ll_BFu16i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu16i_BFu0ll) C1{ FL:9 Fi:16 FL:0}



static void Test_BFu9ll_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu16i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16i_BFu0ll, BFu9ll_BFu16i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu16i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu16i_BFu0s) C1{ FL:9 Fi:16 Fs:0}



static void Test_BFu9ll_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu16i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16i_BFu0s, BFu9ll_BFu16i_BFu0s)
//============================================================================


struct  BFu9ll_BFu16ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu16ll_BFu0c) C1{ FL:9 FL:16 Fc:0}



static void Test_BFu9ll_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu16ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16ll_BFu0c, BFu9ll_BFu16ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu16ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu16ll_BFu0i) C1{ FL:9 FL:16 Fi:0}



static void Test_BFu9ll_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu16ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16ll_BFu0i, BFu9ll_BFu16ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu16ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu16ll_BFu0ll) C1{ FL:9 FL:16 FL:0}



static void Test_BFu9ll_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu16ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16ll_BFu0ll, BFu9ll_BFu16ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu16ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu16ll_BFu0s) C1{ FL:9 FL:16 Fs:0}



static void Test_BFu9ll_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu16ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9ll_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9ll_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16ll_BFu0s, BFu9ll_BFu16ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu16s_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu16s_BFu0c) C1{ FL:9 Fs:16 Fc:0}



static void Test_BFu9ll_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu16s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16s_BFu0c, BFu9ll_BFu16s_BFu0c)
//============================================================================


struct  BFu9ll_BFu16s_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu16s_BFu0i) C1{ FL:9 Fs:16 Fi:0}



static void Test_BFu9ll_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu16s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16s_BFu0i, BFu9ll_BFu16s_BFu0i)
//============================================================================


struct  BFu9ll_BFu16s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu16s_BFu0ll) C1{ FL:9 Fs:16 FL:0}



static void Test_BFu9ll_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu16s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16s_BFu0ll, BFu9ll_BFu16s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu16s_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu16s_BFu0s) C1{ FL:9 Fs:16 Fs:0}



static void Test_BFu9ll_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu16s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9ll_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9ll_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu16s_BFu0s, BFu9ll_BFu16s_BFu0s)
//============================================================================


struct  BFu9ll_BFu17i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu17i_BFu0c) C1{ FL:9 Fi:17 Fc:0}



static void Test_BFu9ll_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu17i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17i_BFu0c, BFu9ll_BFu17i_BFu0c)
//============================================================================


struct  BFu9ll_BFu17i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu17i_BFu0i) C1{ FL:9 Fi:17 Fi:0}



static void Test_BFu9ll_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu17i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17i_BFu0i, BFu9ll_BFu17i_BFu0i)
//============================================================================


struct  BFu9ll_BFu17i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu17i_BFu0ll) C1{ FL:9 Fi:17 FL:0}



static void Test_BFu9ll_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu17i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17i_BFu0ll, BFu9ll_BFu17i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu17i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu17i_BFu0s) C1{ FL:9 Fi:17 Fs:0}



static void Test_BFu9ll_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu17i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17i_BFu0s, BFu9ll_BFu17i_BFu0s)
//============================================================================


struct  BFu9ll_BFu17ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu17ll_BFu0c) C1{ FL:9 FL:17 Fc:0}



static void Test_BFu9ll_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu17ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17ll_BFu0c, BFu9ll_BFu17ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu17ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu17ll_BFu0i) C1{ FL:9 FL:17 Fi:0}



static void Test_BFu9ll_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu17ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17ll_BFu0i, BFu9ll_BFu17ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu17ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu17ll_BFu0ll) C1{ FL:9 FL:17 FL:0}



static void Test_BFu9ll_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu17ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17ll_BFu0ll, BFu9ll_BFu17ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu17ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu17ll_BFu0s) C1{ FL:9 FL:17 Fs:0}



static void Test_BFu9ll_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu17ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9ll_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9ll_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu17ll_BFu0s, BFu9ll_BFu17ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu1c_BFu0c  {
  __tsu64 v1:9;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu1c_BFu0c) C1{ FL:9 Fc:1 Fc:0}



static void Test_BFu9ll_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu1c_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1c_BFu0c, BFu9ll_BFu1c_BFu0c)
//============================================================================


struct  BFu9ll_BFu1c_BFu0i  {
  __tsu64 v1:9;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu1c_BFu0i) C1{ FL:9 Fc:1 Fi:0}



static void Test_BFu9ll_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu1c_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1c_BFu0i, BFu9ll_BFu1c_BFu0i)
//============================================================================


struct  BFu9ll_BFu1c_BFu0ll  {
  __tsu64 v1:9;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu1c_BFu0ll) C1{ FL:9 Fc:1 FL:0}



static void Test_BFu9ll_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu1c_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1c_BFu0ll, BFu9ll_BFu1c_BFu0ll)
//============================================================================


struct  BFu9ll_BFu1c_BFu0s  {
  __tsu64 v1:9;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu1c_BFu0s) C1{ FL:9 Fc:1 Fs:0}



static void Test_BFu9ll_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu1c_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1c_BFu0s, BFu9ll_BFu1c_BFu0s)
//============================================================================


struct  BFu9ll_BFu1i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu1i_BFu0c) C1{ FL:9 Fi:1 Fc:0}



static void Test_BFu9ll_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu1i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1i_BFu0c, BFu9ll_BFu1i_BFu0c)
//============================================================================


struct  BFu9ll_BFu1i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu1i_BFu0i) C1{ FL:9 Fi:1 Fi:0}



static void Test_BFu9ll_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu1i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1i_BFu0i, BFu9ll_BFu1i_BFu0i)
//============================================================================


struct  BFu9ll_BFu1i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu1i_BFu0ll) C1{ FL:9 Fi:1 FL:0}



static void Test_BFu9ll_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu1i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1i_BFu0ll, BFu9ll_BFu1i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu1i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu1i_BFu0s) C1{ FL:9 Fi:1 Fs:0}



static void Test_BFu9ll_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu1i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1i_BFu0s, BFu9ll_BFu1i_BFu0s)
//============================================================================


struct  BFu9ll_BFu1ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu1ll_BFu0c) C1{ FL:9 FL:1 Fc:0}



static void Test_BFu9ll_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu1ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1ll_BFu0c, BFu9ll_BFu1ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu1ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu1ll_BFu0i) C1{ FL:9 FL:1 Fi:0}



static void Test_BFu9ll_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu1ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1ll_BFu0i, BFu9ll_BFu1ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu1ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu1ll_BFu0ll) C1{ FL:9 FL:1 FL:0}



static void Test_BFu9ll_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu1ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1ll_BFu0ll, BFu9ll_BFu1ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu1ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu1ll_BFu0s) C1{ FL:9 FL:1 Fs:0}



static void Test_BFu9ll_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu1ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1ll_BFu0s, BFu9ll_BFu1ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu1s_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu1s_BFu0c) C1{ FL:9 Fs:1 Fc:0}



static void Test_BFu9ll_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu1s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1s_BFu0c, BFu9ll_BFu1s_BFu0c)
//============================================================================


struct  BFu9ll_BFu1s_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu1s_BFu0i) C1{ FL:9 Fs:1 Fi:0}



static void Test_BFu9ll_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu1s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1s_BFu0i, BFu9ll_BFu1s_BFu0i)
//============================================================================


struct  BFu9ll_BFu1s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu1s_BFu0ll) C1{ FL:9 Fs:1 FL:0}



static void Test_BFu9ll_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu1s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1s_BFu0ll, BFu9ll_BFu1s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu1s_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu1s_BFu0s) C1{ FL:9 Fs:1 Fs:0}



static void Test_BFu9ll_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu1s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9ll_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu1s_BFu0s, BFu9ll_BFu1s_BFu0s)
//============================================================================


struct  BFu9ll_BFu31i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu31i_BFu0c) C1{ FL:9 Fi:31 Fc:0}



static void Test_BFu9ll_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu31i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31i_BFu0c, BFu9ll_BFu31i_BFu0c)
//============================================================================


struct  BFu9ll_BFu31i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu31i_BFu0i) C1{ FL:9 Fi:31 Fi:0}



static void Test_BFu9ll_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu31i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31i_BFu0i, BFu9ll_BFu31i_BFu0i)
//============================================================================


struct  BFu9ll_BFu31i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu31i_BFu0ll) C1{ FL:9 Fi:31 FL:0}



static void Test_BFu9ll_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu31i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31i_BFu0ll, BFu9ll_BFu31i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu31i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu31i_BFu0s) C1{ FL:9 Fi:31 Fs:0}



static void Test_BFu9ll_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu31i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9ll_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9ll_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31i_BFu0s, BFu9ll_BFu31i_BFu0s)
//============================================================================


struct  BFu9ll_BFu31ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu31ll_BFu0c) C1{ FL:9 FL:31 Fc:0}



static void Test_BFu9ll_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu31ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9ll_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9ll_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31ll_BFu0c, BFu9ll_BFu31ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu31ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu31ll_BFu0i) C1{ FL:9 FL:31 Fi:0}



static void Test_BFu9ll_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu31ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9ll_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9ll_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31ll_BFu0i, BFu9ll_BFu31ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu31ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu31ll_BFu0ll) C1{ FL:9 FL:31 FL:0}



static void Test_BFu9ll_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu31ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9ll_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9ll_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31ll_BFu0ll, BFu9ll_BFu31ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu31ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu31ll_BFu0s) C1{ FL:9 FL:31 Fs:0}



static void Test_BFu9ll_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu31ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9ll_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9ll_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu31ll_BFu0s, BFu9ll_BFu31ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu32i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu32i_BFu0c) C1{ FL:9 Fi:32 Fc:0}



static void Test_BFu9ll_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu32i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32i_BFu0c, BFu9ll_BFu32i_BFu0c)
//============================================================================


struct  BFu9ll_BFu32i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu32i_BFu0i) C1{ FL:9 Fi:32 Fi:0}



static void Test_BFu9ll_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu32i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32i_BFu0i, BFu9ll_BFu32i_BFu0i)
//============================================================================


struct  BFu9ll_BFu32i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu32i_BFu0ll) C1{ FL:9 Fi:32 FL:0}



static void Test_BFu9ll_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu32i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32i_BFu0ll, BFu9ll_BFu32i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu32i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu32i_BFu0s) C1{ FL:9 Fi:32 Fs:0}



static void Test_BFu9ll_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu32i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9ll_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9ll_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32i_BFu0s, BFu9ll_BFu32i_BFu0s)
//============================================================================


struct  BFu9ll_BFu32ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu32ll_BFu0c) C1{ FL:9 FL:32 Fc:0}



static void Test_BFu9ll_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu32ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9ll_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9ll_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32ll_BFu0c, BFu9ll_BFu32ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu32ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu32ll_BFu0i) C1{ FL:9 FL:32 Fi:0}



static void Test_BFu9ll_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu32ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9ll_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9ll_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32ll_BFu0i, BFu9ll_BFu32ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu32ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu32ll_BFu0ll) C1{ FL:9 FL:32 FL:0}



static void Test_BFu9ll_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu32ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9ll_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9ll_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32ll_BFu0ll, BFu9ll_BFu32ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu32ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu32ll_BFu0s) C1{ FL:9 FL:32 Fs:0}



static void Test_BFu9ll_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu32ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9ll_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9ll_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu32ll_BFu0s, BFu9ll_BFu32ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu33_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu33_BFu0c) C1{ FL:9 FL:33 Fc:0}



static void Test_BFu9ll_BFu33_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu33_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9ll_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9ll_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu33_BFu0c, BFu9ll_BFu33_BFu0c)
//============================================================================


struct  BFu9ll_BFu33_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu33_BFu0i) C1{ FL:9 FL:33 Fi:0}



static void Test_BFu9ll_BFu33_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu33_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9ll_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9ll_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu33_BFu0i, BFu9ll_BFu33_BFu0i)
//============================================================================


struct  BFu9ll_BFu33_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu33_BFu0ll) C1{ FL:9 FL:33 FL:0}



static void Test_BFu9ll_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu33_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9ll_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9ll_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu33_BFu0ll, BFu9ll_BFu33_BFu0ll)
//============================================================================


struct  BFu9ll_BFu33_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu33_BFu0s) C1{ FL:9 FL:33 Fs:0}



static void Test_BFu9ll_BFu33_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu33_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9ll_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9ll_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu33_BFu0s, BFu9ll_BFu33_BFu0s)
//============================================================================


struct  BFu9ll_BFu7c_BFu0c  {
  __tsu64 v1:9;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu7c_BFu0c) C1{ FL:9 Fc:7 Fc:0}



static void Test_BFu9ll_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu7c_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7c_BFu0c, BFu9ll_BFu7c_BFu0c)
//============================================================================


struct  BFu9ll_BFu7c_BFu0i  {
  __tsu64 v1:9;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu7c_BFu0i) C1{ FL:9 Fc:7 Fi:0}



static void Test_BFu9ll_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu7c_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7c_BFu0i, BFu9ll_BFu7c_BFu0i)
//============================================================================


struct  BFu9ll_BFu7c_BFu0ll  {
  __tsu64 v1:9;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu7c_BFu0ll) C1{ FL:9 Fc:7 FL:0}



static void Test_BFu9ll_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu7c_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7c_BFu0ll, BFu9ll_BFu7c_BFu0ll)
//============================================================================


struct  BFu9ll_BFu7c_BFu0s  {
  __tsu64 v1:9;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu7c_BFu0s) C1{ FL:9 Fc:7 Fs:0}



static void Test_BFu9ll_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu7c_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7c_BFu0s, BFu9ll_BFu7c_BFu0s)
//============================================================================


struct  BFu9ll_BFu7i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu7i_BFu0c) C1{ FL:9 Fi:7 Fc:0}



static void Test_BFu9ll_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu7i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7i_BFu0c, BFu9ll_BFu7i_BFu0c)
//============================================================================


struct  BFu9ll_BFu7i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu7i_BFu0i) C1{ FL:9 Fi:7 Fi:0}



static void Test_BFu9ll_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu7i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7i_BFu0i, BFu9ll_BFu7i_BFu0i)
//============================================================================


struct  BFu9ll_BFu7i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu7i_BFu0ll) C1{ FL:9 Fi:7 FL:0}



static void Test_BFu9ll_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu7i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7i_BFu0ll, BFu9ll_BFu7i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu7i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu7i_BFu0s) C1{ FL:9 Fi:7 Fs:0}



static void Test_BFu9ll_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu7i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7i_BFu0s, BFu9ll_BFu7i_BFu0s)
//============================================================================


struct  BFu9ll_BFu7ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu7ll_BFu0c) C1{ FL:9 FL:7 Fc:0}



static void Test_BFu9ll_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu7ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7ll_BFu0c, BFu9ll_BFu7ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu7ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu7ll_BFu0i) C1{ FL:9 FL:7 Fi:0}



static void Test_BFu9ll_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu7ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7ll_BFu0i, BFu9ll_BFu7ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu7ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu7ll_BFu0ll) C1{ FL:9 FL:7 FL:0}



static void Test_BFu9ll_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu7ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7ll_BFu0ll, BFu9ll_BFu7ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu7ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu7ll_BFu0s) C1{ FL:9 FL:7 Fs:0}



static void Test_BFu9ll_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu7ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7ll_BFu0s, BFu9ll_BFu7ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu7s_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu7s_BFu0c) C1{ FL:9 Fs:7 Fc:0}



static void Test_BFu9ll_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu7s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7s_BFu0c, BFu9ll_BFu7s_BFu0c)
//============================================================================


struct  BFu9ll_BFu7s_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu7s_BFu0i) C1{ FL:9 Fs:7 Fi:0}



static void Test_BFu9ll_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu7s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7s_BFu0i, BFu9ll_BFu7s_BFu0i)
//============================================================================


struct  BFu9ll_BFu7s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu7s_BFu0ll) C1{ FL:9 Fs:7 FL:0}



static void Test_BFu9ll_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu7s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7s_BFu0ll, BFu9ll_BFu7s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu7s_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu7s_BFu0s) C1{ FL:9 Fs:7 Fs:0}



static void Test_BFu9ll_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu7s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9ll_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9ll_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu7s_BFu0s, BFu9ll_BFu7s_BFu0s)
//============================================================================


struct  BFu9ll_BFu8c_BFu0c  {
  __tsu64 v1:9;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu8c_BFu0c) C1{ FL:9 Fc:8 Fc:0}



static void Test_BFu9ll_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu8c_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8c_BFu0c, BFu9ll_BFu8c_BFu0c)
//============================================================================


struct  BFu9ll_BFu8c_BFu0i  {
  __tsu64 v1:9;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu8c_BFu0i) C1{ FL:9 Fc:8 Fi:0}



static void Test_BFu9ll_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu8c_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8c_BFu0i, BFu9ll_BFu8c_BFu0i)
//============================================================================


struct  BFu9ll_BFu8c_BFu0ll  {
  __tsu64 v1:9;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu8c_BFu0ll) C1{ FL:9 Fc:8 FL:0}



static void Test_BFu9ll_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu8c_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8c_BFu0ll, BFu9ll_BFu8c_BFu0ll)
//============================================================================


struct  BFu9ll_BFu8c_BFu0s  {
  __tsu64 v1:9;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu8c_BFu0s) C1{ FL:9 Fc:8 Fs:0}



static void Test_BFu9ll_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu8c_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8c_BFu0s, BFu9ll_BFu8c_BFu0s)
//============================================================================


struct  BFu9ll_BFu8i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu8i_BFu0c) C1{ FL:9 Fi:8 Fc:0}



static void Test_BFu9ll_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu8i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8i_BFu0c, BFu9ll_BFu8i_BFu0c)
//============================================================================


struct  BFu9ll_BFu8i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu8i_BFu0i) C1{ FL:9 Fi:8 Fi:0}



static void Test_BFu9ll_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu8i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8i_BFu0i, BFu9ll_BFu8i_BFu0i)
//============================================================================


struct  BFu9ll_BFu8i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu8i_BFu0ll) C1{ FL:9 Fi:8 FL:0}



static void Test_BFu9ll_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu8i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8i_BFu0ll, BFu9ll_BFu8i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu8i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu8i_BFu0s) C1{ FL:9 Fi:8 Fs:0}



static void Test_BFu9ll_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu8i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8i_BFu0s, BFu9ll_BFu8i_BFu0s)
//============================================================================


struct  BFu9ll_BFu8ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu8ll_BFu0c) C1{ FL:9 FL:8 Fc:0}



static void Test_BFu9ll_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu8ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8ll_BFu0c, BFu9ll_BFu8ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu8ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu8ll_BFu0i) C1{ FL:9 FL:8 Fi:0}



static void Test_BFu9ll_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu8ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8ll_BFu0i, BFu9ll_BFu8ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu8ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu8ll_BFu0ll) C1{ FL:9 FL:8 FL:0}



static void Test_BFu9ll_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu8ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8ll_BFu0ll, BFu9ll_BFu8ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu8ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu8ll_BFu0s) C1{ FL:9 FL:8 Fs:0}



static void Test_BFu9ll_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu8ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9ll_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9ll_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8ll_BFu0s, BFu9ll_BFu8ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu8s_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu8s_BFu0c) C1{ FL:9 Fs:8 Fc:0}



static void Test_BFu9ll_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu8s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8s_BFu0c, BFu9ll_BFu8s_BFu0c)
//============================================================================


struct  BFu9ll_BFu8s_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu8s_BFu0i) C1{ FL:9 Fs:8 Fi:0}



static void Test_BFu9ll_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu8s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8s_BFu0i, BFu9ll_BFu8s_BFu0i)
//============================================================================


struct  BFu9ll_BFu8s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu8s_BFu0ll) C1{ FL:9 Fs:8 FL:0}



static void Test_BFu9ll_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu8s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8s_BFu0ll, BFu9ll_BFu8s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu8s_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu8s_BFu0s) C1{ FL:9 Fs:8 Fs:0}



static void Test_BFu9ll_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu8s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9ll_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9ll_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu8s_BFu0s, BFu9ll_BFu8s_BFu0s)
//============================================================================


struct  BFu9ll_BFu9i_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu9i_BFu0c) C1{ FL:9 Fi:9 Fc:0}



static void Test_BFu9ll_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu9i_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9i_BFu0c, BFu9ll_BFu9i_BFu0c)
//============================================================================


struct  BFu9ll_BFu9i_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu9i_BFu0i) C1{ FL:9 Fi:9 Fi:0}



static void Test_BFu9ll_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu9i_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9i_BFu0i, BFu9ll_BFu9i_BFu0i)
//============================================================================


struct  BFu9ll_BFu9i_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu9i_BFu0ll) C1{ FL:9 Fi:9 FL:0}



static void Test_BFu9ll_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu9i_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9i_BFu0ll, BFu9ll_BFu9i_BFu0ll)
//============================================================================


struct  BFu9ll_BFu9i_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu9i_BFu0s) C1{ FL:9 Fi:9 Fs:0}



static void Test_BFu9ll_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu9i_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9i_BFu0s, BFu9ll_BFu9i_BFu0s)
//============================================================================


struct  BFu9ll_BFu9ll_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu9ll_BFu0c) C1{ FL:9 FL:9 Fc:0}



static void Test_BFu9ll_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu9ll_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9ll_BFu0c, BFu9ll_BFu9ll_BFu0c)
//============================================================================


struct  BFu9ll_BFu9ll_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu9ll_BFu0i) C1{ FL:9 FL:9 Fi:0}



static void Test_BFu9ll_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu9ll_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9ll_BFu0i, BFu9ll_BFu9ll_BFu0i)
//============================================================================


struct  BFu9ll_BFu9ll_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu9ll_BFu0ll) C1{ FL:9 FL:9 FL:0}



static void Test_BFu9ll_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu9ll_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9ll_BFu0ll, BFu9ll_BFu9ll_BFu0ll)
//============================================================================


struct  BFu9ll_BFu9ll_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu9ll_BFu0s) C1{ FL:9 FL:9 Fs:0}



static void Test_BFu9ll_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu9ll_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9ll_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9ll_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9ll_BFu0s, BFu9ll_BFu9ll_BFu0s)
//============================================================================


struct  BFu9ll_BFu9s_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu9ll_BFu9s_BFu0c) C1{ FL:9 Fs:9 Fc:0}



static void Test_BFu9ll_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu9ll_BFu9s_BFu0c");
    static STRUCT_IF_C BFu9ll_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9s_BFu0c, BFu9ll_BFu9s_BFu0c)
//============================================================================


struct  BFu9ll_BFu9s_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu9ll_BFu9s_BFu0i) C1{ FL:9 Fs:9 Fi:0}



static void Test_BFu9ll_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu9ll_BFu9s_BFu0i");
    static STRUCT_IF_C BFu9ll_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9s_BFu0i, BFu9ll_BFu9s_BFu0i)
//============================================================================


struct  BFu9ll_BFu9s_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu9ll_BFu9s_BFu0ll) C1{ FL:9 Fs:9 FL:0}



static void Test_BFu9ll_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu9ll_BFu9s_BFu0ll");
    static STRUCT_IF_C BFu9ll_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9s_BFu0ll, BFu9ll_BFu9s_BFu0ll)
//============================================================================


struct  BFu9ll_BFu9s_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu9ll_BFu9s_BFu0s) C1{ FL:9 Fs:9 Fs:0}



static void Test_BFu9ll_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu9ll_BFu9s_BFu0s");
    static STRUCT_IF_C BFu9ll_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9ll_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9ll_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_BFu9s_BFu0s, BFu9ll_BFu9s_BFu0s)
//============================================================================


struct  BFu9ll_C_BFu0c  {
  __tsu64 v1:9;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_C_BFu0c) C1{ FL:9 Fc Fc:0}



static void Test_BFu9ll_C_BFu0c()
{
  {
    init_simple_test("BFu9ll_C_BFu0c");
    static STRUCT_IF_C BFu9ll_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_C_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9ll_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_C_BFu0c, BFu9ll_C_BFu0c)
//============================================================================


struct  BFu9ll_C_BFu0i  {
  __tsu64 v1:9;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_C_BFu0i) C1{ FL:9 Fc Fi:0}



static void Test_BFu9ll_C_BFu0i()
{
  {
    init_simple_test("BFu9ll_C_BFu0i");
    static STRUCT_IF_C BFu9ll_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_C_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9ll_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_C_BFu0i, BFu9ll_C_BFu0i)
//============================================================================


struct  BFu9ll_C_BFu0ll  {
  __tsu64 v1:9;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_C_BFu0ll) C1{ FL:9 Fc FL:0}



static void Test_BFu9ll_C_BFu0ll()
{
  {
    init_simple_test("BFu9ll_C_BFu0ll");
    static STRUCT_IF_C BFu9ll_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_C_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9ll_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_C_BFu0ll, BFu9ll_C_BFu0ll)
//============================================================================


struct  BFu9ll_C_BFu0s  {
  __tsu64 v1:9;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_C_BFu0s) C1{ FL:9 Fc Fs:0}



static void Test_BFu9ll_C_BFu0s()
{
  {
    init_simple_test("BFu9ll_C_BFu0s");
    static STRUCT_IF_C BFu9ll_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_C_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9ll_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_C_BFu0s, BFu9ll_C_BFu0s)
//============================================================================


struct  BFu9ll_D_BFu0c  {
  __tsu64 v1:9;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_D_BFu0c) C1{ FL:9 FL Fc:0}



static void Test_BFu9ll_D_BFu0c()
{
  {
    init_simple_test("BFu9ll_D_BFu0c");
    static STRUCT_IF_C BFu9ll_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_D_BFu0c, BFu9ll_D_BFu0c)
//============================================================================


struct  BFu9ll_D_BFu0i  {
  __tsu64 v1:9;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_D_BFu0i) C1{ FL:9 FL Fi:0}



static void Test_BFu9ll_D_BFu0i()
{
  {
    init_simple_test("BFu9ll_D_BFu0i");
    static STRUCT_IF_C BFu9ll_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_D_BFu0i, BFu9ll_D_BFu0i)
//============================================================================


struct  BFu9ll_D_BFu0ll  {
  __tsu64 v1:9;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_D_BFu0ll) C1{ FL:9 FL FL:0}



static void Test_BFu9ll_D_BFu0ll()
{
  {
    init_simple_test("BFu9ll_D_BFu0ll");
    static STRUCT_IF_C BFu9ll_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_D_BFu0ll, BFu9ll_D_BFu0ll)
//============================================================================


struct  BFu9ll_D_BFu0s  {
  __tsu64 v1:9;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_D_BFu0s) C1{ FL:9 FL Fs:0}



static void Test_BFu9ll_D_BFu0s()
{
  {
    init_simple_test("BFu9ll_D_BFu0s");
    static STRUCT_IF_C BFu9ll_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_D_BFu0s, BFu9ll_D_BFu0s)
//============================================================================


struct  BFu9ll_F_BFu0c  {
  __tsu64 v1:9;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_F_BFu0c) C1{ FL:9 Fi Fc:0}



static void Test_BFu9ll_F_BFu0c()
{
  {
    init_simple_test("BFu9ll_F_BFu0c");
    static STRUCT_IF_C BFu9ll_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu9ll_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_F_BFu0c, BFu9ll_F_BFu0c)
//============================================================================


struct  BFu9ll_F_BFu0i  {
  __tsu64 v1:9;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_F_BFu0i) C1{ FL:9 Fi Fi:0}



static void Test_BFu9ll_F_BFu0i()
{
  {
    init_simple_test("BFu9ll_F_BFu0i");
    static STRUCT_IF_C BFu9ll_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu9ll_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_F_BFu0i, BFu9ll_F_BFu0i)
//============================================================================


struct  BFu9ll_F_BFu0ll  {
  __tsu64 v1:9;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_F_BFu0ll) C1{ FL:9 Fi FL:0}



static void Test_BFu9ll_F_BFu0ll()
{
  {
    init_simple_test("BFu9ll_F_BFu0ll");
    static STRUCT_IF_C BFu9ll_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu9ll_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_F_BFu0ll, BFu9ll_F_BFu0ll)
//============================================================================


struct  BFu9ll_F_BFu0s  {
  __tsu64 v1:9;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_F_BFu0s) C1{ FL:9 Fi Fs:0}



static void Test_BFu9ll_F_BFu0s()
{
  {
    init_simple_test("BFu9ll_F_BFu0s");
    static STRUCT_IF_C BFu9ll_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu9ll_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_F_BFu0s, BFu9ll_F_BFu0s)
//============================================================================


struct  BFu9ll_I_BFu0c  {
  __tsu64 v1:9;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_I_BFu0c) C1{ FL:9 Fi Fc:0}



static void Test_BFu9ll_I_BFu0c()
{
  {
    init_simple_test("BFu9ll_I_BFu0c");
    static STRUCT_IF_C BFu9ll_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu9ll_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_I_BFu0c, BFu9ll_I_BFu0c)
//============================================================================


struct  BFu9ll_I_BFu0i  {
  __tsu64 v1:9;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_I_BFu0i) C1{ FL:9 Fi Fi:0}



static void Test_BFu9ll_I_BFu0i()
{
  {
    init_simple_test("BFu9ll_I_BFu0i");
    static STRUCT_IF_C BFu9ll_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu9ll_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_I_BFu0i, BFu9ll_I_BFu0i)
//============================================================================


struct  BFu9ll_I_BFu0ll  {
  __tsu64 v1:9;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_I_BFu0ll) C1{ FL:9 Fi FL:0}



static void Test_BFu9ll_I_BFu0ll()
{
  {
    init_simple_test("BFu9ll_I_BFu0ll");
    static STRUCT_IF_C BFu9ll_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu9ll_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_I_BFu0ll, BFu9ll_I_BFu0ll)
//============================================================================


struct  BFu9ll_I_BFu0s  {
  __tsu64 v1:9;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_I_BFu0s) C1{ FL:9 Fi Fs:0}



static void Test_BFu9ll_I_BFu0s()
{
  {
    init_simple_test("BFu9ll_I_BFu0s");
    static STRUCT_IF_C BFu9ll_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu9ll_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_I_BFu0s, BFu9ll_I_BFu0s)
//============================================================================


struct  BFu9ll_Ip_BFu0c  {
  __tsu64 v1:9;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_Ip_BFu0c) C1{ FL:9 Fp Fc:0}



static void Test_BFu9ll_Ip_BFu0c()
{
  {
    init_simple_test("BFu9ll_Ip_BFu0c");
    static STRUCT_IF_C BFu9ll_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ip_BFu0c, BFu9ll_Ip_BFu0c)
//============================================================================


struct  BFu9ll_Ip_BFu0i  {
  __tsu64 v1:9;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_Ip_BFu0i) C1{ FL:9 Fp Fi:0}



static void Test_BFu9ll_Ip_BFu0i()
{
  {
    init_simple_test("BFu9ll_Ip_BFu0i");
    static STRUCT_IF_C BFu9ll_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ip_BFu0i, BFu9ll_Ip_BFu0i)
//============================================================================


struct  BFu9ll_Ip_BFu0ll  {
  __tsu64 v1:9;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_Ip_BFu0ll) C1{ FL:9 Fp FL:0}



static void Test_BFu9ll_Ip_BFu0ll()
{
  {
    init_simple_test("BFu9ll_Ip_BFu0ll");
    static STRUCT_IF_C BFu9ll_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ip_BFu0ll, BFu9ll_Ip_BFu0ll)
//============================================================================


struct  BFu9ll_Ip_BFu0s  {
  __tsu64 v1:9;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_Ip_BFu0s) C1{ FL:9 Fp Fs:0}



static void Test_BFu9ll_Ip_BFu0s()
{
  {
    init_simple_test("BFu9ll_Ip_BFu0s");
    static STRUCT_IF_C BFu9ll_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ip_BFu0s, BFu9ll_Ip_BFu0s)
//============================================================================


struct  BFu9ll_L_BFu0c  {
  __tsu64 v1:9;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_L_BFu0c) C1{ FL:9 FL Fc:0}



static void Test_BFu9ll_L_BFu0c()
{
  {
    init_simple_test("BFu9ll_L_BFu0c");
    static STRUCT_IF_C BFu9ll_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_L_BFu0c, BFu9ll_L_BFu0c)
//============================================================================


struct  BFu9ll_L_BFu0i  {
  __tsu64 v1:9;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_L_BFu0i) C1{ FL:9 FL Fi:0}



static void Test_BFu9ll_L_BFu0i()
{
  {
    init_simple_test("BFu9ll_L_BFu0i");
    static STRUCT_IF_C BFu9ll_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_L_BFu0i, BFu9ll_L_BFu0i)
//============================================================================


struct  BFu9ll_L_BFu0ll  {
  __tsu64 v1:9;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_L_BFu0ll) C1{ FL:9 FL FL:0}



static void Test_BFu9ll_L_BFu0ll()
{
  {
    init_simple_test("BFu9ll_L_BFu0ll");
    static STRUCT_IF_C BFu9ll_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_L_BFu0ll, BFu9ll_L_BFu0ll)
//============================================================================


struct  BFu9ll_L_BFu0s  {
  __tsu64 v1:9;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_L_BFu0s) C1{ FL:9 FL Fs:0}



static void Test_BFu9ll_L_BFu0s()
{
  {
    init_simple_test("BFu9ll_L_BFu0s");
    static STRUCT_IF_C BFu9ll_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_L_BFu0s, BFu9ll_L_BFu0s)
//============================================================================


struct  BFu9ll_S_BFu0c  {
  __tsu64 v1:9;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_S_BFu0c) C1{ FL:9 Fs Fc:0}



static void Test_BFu9ll_S_BFu0c()
{
  {
    init_simple_test("BFu9ll_S_BFu0c");
    static STRUCT_IF_C BFu9ll_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9ll_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_S_BFu0c, BFu9ll_S_BFu0c)
//============================================================================


struct  BFu9ll_S_BFu0i  {
  __tsu64 v1:9;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_S_BFu0i) C1{ FL:9 Fs Fi:0}



static void Test_BFu9ll_S_BFu0i()
{
  {
    init_simple_test("BFu9ll_S_BFu0i");
    static STRUCT_IF_C BFu9ll_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9ll_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_S_BFu0i, BFu9ll_S_BFu0i)
//============================================================================


struct  BFu9ll_S_BFu0ll  {
  __tsu64 v1:9;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_S_BFu0ll) C1{ FL:9 Fs FL:0}



static void Test_BFu9ll_S_BFu0ll()
{
  {
    init_simple_test("BFu9ll_S_BFu0ll");
    static STRUCT_IF_C BFu9ll_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9ll_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_S_BFu0ll, BFu9ll_S_BFu0ll)
//============================================================================


struct  BFu9ll_S_BFu0s  {
  __tsu64 v1:9;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_S_BFu0s) C1{ FL:9 Fs Fs:0}



static void Test_BFu9ll_S_BFu0s()
{
  {
    init_simple_test("BFu9ll_S_BFu0s");
    static STRUCT_IF_C BFu9ll_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9ll_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_S_BFu0s, BFu9ll_S_BFu0s)
//============================================================================


struct  BFu9ll_Uc_BFu0c  {
  __tsu64 v1:9;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_Uc_BFu0c) C1{ FL:9 Fc Fc:0}



static void Test_BFu9ll_Uc_BFu0c()
{
  {
    init_simple_test("BFu9ll_Uc_BFu0c");
    static STRUCT_IF_C BFu9ll_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Uc_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9ll_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Uc_BFu0c, BFu9ll_Uc_BFu0c)
//============================================================================


struct  BFu9ll_Uc_BFu0i  {
  __tsu64 v1:9;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_Uc_BFu0i) C1{ FL:9 Fc Fi:0}



static void Test_BFu9ll_Uc_BFu0i()
{
  {
    init_simple_test("BFu9ll_Uc_BFu0i");
    static STRUCT_IF_C BFu9ll_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Uc_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9ll_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Uc_BFu0i, BFu9ll_Uc_BFu0i)
//============================================================================


struct  BFu9ll_Uc_BFu0ll  {
  __tsu64 v1:9;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_Uc_BFu0ll) C1{ FL:9 Fc FL:0}



static void Test_BFu9ll_Uc_BFu0ll()
{
  {
    init_simple_test("BFu9ll_Uc_BFu0ll");
    static STRUCT_IF_C BFu9ll_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Uc_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9ll_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Uc_BFu0ll, BFu9ll_Uc_BFu0ll)
//============================================================================


struct  BFu9ll_Uc_BFu0s  {
  __tsu64 v1:9;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_Uc_BFu0s) C1{ FL:9 Fc Fs:0}



static void Test_BFu9ll_Uc_BFu0s()
{
  {
    init_simple_test("BFu9ll_Uc_BFu0s");
    static STRUCT_IF_C BFu9ll_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Uc_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9ll_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Uc_BFu0s, BFu9ll_Uc_BFu0s)
//============================================================================


struct  BFu9ll_Ui_BFu0c  {
  __tsu64 v1:9;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_Ui_BFu0c) C1{ FL:9 Fi Fc:0}



static void Test_BFu9ll_Ui_BFu0c()
{
  {
    init_simple_test("BFu9ll_Ui_BFu0c");
    static STRUCT_IF_C BFu9ll_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu9ll_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ui_BFu0c, BFu9ll_Ui_BFu0c)
//============================================================================


struct  BFu9ll_Ui_BFu0i  {
  __tsu64 v1:9;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_Ui_BFu0i) C1{ FL:9 Fi Fi:0}



static void Test_BFu9ll_Ui_BFu0i()
{
  {
    init_simple_test("BFu9ll_Ui_BFu0i");
    static STRUCT_IF_C BFu9ll_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu9ll_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ui_BFu0i, BFu9ll_Ui_BFu0i)
//============================================================================


struct  BFu9ll_Ui_BFu0ll  {
  __tsu64 v1:9;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_Ui_BFu0ll) C1{ FL:9 Fi FL:0}



static void Test_BFu9ll_Ui_BFu0ll()
{
  {
    init_simple_test("BFu9ll_Ui_BFu0ll");
    static STRUCT_IF_C BFu9ll_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu9ll_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ui_BFu0ll, BFu9ll_Ui_BFu0ll)
//============================================================================


struct  BFu9ll_Ui_BFu0s  {
  __tsu64 v1:9;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_Ui_BFu0s) C1{ FL:9 Fi Fs:0}



static void Test_BFu9ll_Ui_BFu0s()
{
  {
    init_simple_test("BFu9ll_Ui_BFu0s");
    static STRUCT_IF_C BFu9ll_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9ll_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu9ll_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ui_BFu0s, BFu9ll_Ui_BFu0s)
//============================================================================


struct  BFu9ll_Ul_BFu0c  {
  __tsu64 v1:9;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_Ul_BFu0c) C1{ FL:9 FL Fc:0}



static void Test_BFu9ll_Ul_BFu0c()
{
  {
    init_simple_test("BFu9ll_Ul_BFu0c");
    static STRUCT_IF_C BFu9ll_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ul_BFu0c, BFu9ll_Ul_BFu0c)
//============================================================================


struct  BFu9ll_Ul_BFu0i  {
  __tsu64 v1:9;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_Ul_BFu0i) C1{ FL:9 FL Fi:0}



static void Test_BFu9ll_Ul_BFu0i()
{
  {
    init_simple_test("BFu9ll_Ul_BFu0i");
    static STRUCT_IF_C BFu9ll_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ul_BFu0i, BFu9ll_Ul_BFu0i)
//============================================================================


struct  BFu9ll_Ul_BFu0ll  {
  __tsu64 v1:9;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_Ul_BFu0ll) C1{ FL:9 FL FL:0}



static void Test_BFu9ll_Ul_BFu0ll()
{
  {
    init_simple_test("BFu9ll_Ul_BFu0ll");
    static STRUCT_IF_C BFu9ll_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ul_BFu0ll, BFu9ll_Ul_BFu0ll)
//============================================================================


struct  BFu9ll_Ul_BFu0s  {
  __tsu64 v1:9;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_Ul_BFu0s) C1{ FL:9 FL Fs:0}



static void Test_BFu9ll_Ul_BFu0s()
{
  {
    init_simple_test("BFu9ll_Ul_BFu0s");
    static STRUCT_IF_C BFu9ll_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9ll_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Ul_BFu0s, BFu9ll_Ul_BFu0s)
//============================================================================


struct  BFu9ll_Us_BFu0c  {
  __tsu64 v1:9;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_Us_BFu0c) C1{ FL:9 Fs Fc:0}



static void Test_BFu9ll_Us_BFu0c()
{
  {
    init_simple_test("BFu9ll_Us_BFu0c");
    static STRUCT_IF_C BFu9ll_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9ll_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Us_BFu0c, BFu9ll_Us_BFu0c)
//============================================================================


struct  BFu9ll_Us_BFu0i  {
  __tsu64 v1:9;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_Us_BFu0i) C1{ FL:9 Fs Fi:0}



static void Test_BFu9ll_Us_BFu0i()
{
  {
    init_simple_test("BFu9ll_Us_BFu0i");
    static STRUCT_IF_C BFu9ll_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9ll_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Us_BFu0i, BFu9ll_Us_BFu0i)
//============================================================================


struct  BFu9ll_Us_BFu0ll  {
  __tsu64 v1:9;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_Us_BFu0ll) C1{ FL:9 Fs FL:0}



static void Test_BFu9ll_Us_BFu0ll()
{
  {
    init_simple_test("BFu9ll_Us_BFu0ll");
    static STRUCT_IF_C BFu9ll_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9ll_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Us_BFu0ll, BFu9ll_Us_BFu0ll)
//============================================================================


struct  BFu9ll_Us_BFu0s  {
  __tsu64 v1:9;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_Us_BFu0s) C1{ FL:9 Fs Fs:0}



static void Test_BFu9ll_Us_BFu0s()
{
  {
    init_simple_test("BFu9ll_Us_BFu0s");
    static STRUCT_IF_C BFu9ll_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9ll_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9ll_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Us_BFu0s, BFu9ll_Us_BFu0s)
//============================================================================


struct  BFu9ll_Vp_BFu0c  {
  __tsu64 v1:9;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu9ll_Vp_BFu0c) C1{ FL:9 Fp Fc:0}



static void Test_BFu9ll_Vp_BFu0c()
{
  {
    init_simple_test("BFu9ll_Vp_BFu0c");
    static STRUCT_IF_C BFu9ll_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Vp_BFu0c, BFu9ll_Vp_BFu0c)
//============================================================================


struct  BFu9ll_Vp_BFu0i  {
  __tsu64 v1:9;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu9ll_Vp_BFu0i) C1{ FL:9 Fp Fi:0}



static void Test_BFu9ll_Vp_BFu0i()
{
  {
    init_simple_test("BFu9ll_Vp_BFu0i");
    static STRUCT_IF_C BFu9ll_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Vp_BFu0i, BFu9ll_Vp_BFu0i)
//============================================================================


struct  BFu9ll_Vp_BFu0ll  {
  __tsu64 v1:9;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu9ll_Vp_BFu0ll) C1{ FL:9 Fp FL:0}



static void Test_BFu9ll_Vp_BFu0ll()
{
  {
    init_simple_test("BFu9ll_Vp_BFu0ll");
    static STRUCT_IF_C BFu9ll_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Vp_BFu0ll, BFu9ll_Vp_BFu0ll)
//============================================================================


struct  BFu9ll_Vp_BFu0s  {
  __tsu64 v1:9;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu9ll_Vp_BFu0s) C1{ FL:9 Fp Fs:0}



static void Test_BFu9ll_Vp_BFu0s()
{
  {
    init_simple_test("BFu9ll_Vp_BFu0s");
    static STRUCT_IF_C BFu9ll_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9ll_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9ll_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9ll_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9ll_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9ll_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9ll_Vp_BFu0s, BFu9ll_Vp_BFu0s)
//============================================================================


struct  BFu9s_BFu0c  {
  unsigned short v1:9;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu0c) C1{ Fs:9 Fc:0}



static void Test_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c, BFu9s_BFu0c)
//============================================================================


struct  BFu9s_BFu0c_BFu0c  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu0c_BFu0c) C1{ Fs:9 Fc:0 Fc:0}



static void Test_BFu9s_BFu0c_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu0c");
    static STRUCT_IF_C BFu9s_BFu0c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu0c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu0c, BFu9s_BFu0c_BFu0c)
//============================================================================


struct  BFu9s_BFu0c_BFu0i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu0c_BFu0i) C1{ Fs:9 Fc:0 Fi:0}



static void Test_BFu9s_BFu0c_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu0i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu0i, BFu9s_BFu0c_BFu0i)
//============================================================================


struct  BFu9s_BFu0c_BFu0ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu0c_BFu0ll) C1{ Fs:9 Fc:0 FL:0}



static void Test_BFu9s_BFu0c_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu0ll, BFu9s_BFu0c_BFu0ll)
//============================================================================


struct  BFu9s_BFu0c_BFu0s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu0c_BFu0s) C1{ Fs:9 Fc:0 Fs:0}



static void Test_BFu9s_BFu0c_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu0s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu0c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu0s, BFu9s_BFu0c_BFu0s)
//============================================================================


struct  BFu9s_BFu0c_BFu15i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9s_BFu0c_BFu15i) C1{ Fs:9 Fc:0 Fi:15}



static void Test_BFu9s_BFu0c_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu15i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu15i, BFu9s_BFu0c_BFu15i)
//============================================================================


struct  BFu9s_BFu0c_BFu15ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9s_BFu0c_BFu15ll) C1{ Fs:9 Fc:0 FL:15}



static void Test_BFu9s_BFu0c_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu15ll, BFu9s_BFu0c_BFu15ll)
//============================================================================


struct  BFu9s_BFu0c_BFu15s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9s_BFu0c_BFu15s) C1{ Fs:9 Fc:0 Fs:15}



static void Test_BFu9s_BFu0c_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu15s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu15s, BFu9s_BFu0c_BFu15s)
//============================================================================


struct  BFu9s_BFu0c_BFu16i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9s_BFu0c_BFu16i) C1{ Fs:9 Fc:0 Fi:16}



static void Test_BFu9s_BFu0c_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu16i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu16i, BFu9s_BFu0c_BFu16i)
//============================================================================


struct  BFu9s_BFu0c_BFu16ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9s_BFu0c_BFu16ll) C1{ Fs:9 Fc:0 FL:16}



static void Test_BFu9s_BFu0c_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu16ll, BFu9s_BFu0c_BFu16ll)
//============================================================================


struct  BFu9s_BFu0c_BFu16s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9s_BFu0c_BFu16s) C1{ Fs:9 Fc:0 Fs:16}



static void Test_BFu9s_BFu0c_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu16s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu16s, BFu9s_BFu0c_BFu16s)
//============================================================================


struct  BFu9s_BFu0c_BFu17i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9s_BFu0c_BFu17i) C1{ Fs:9 Fc:0 Fi:17}



static void Test_BFu9s_BFu0c_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu17i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9s_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu17i, BFu9s_BFu0c_BFu17i)
//============================================================================


struct  BFu9s_BFu0c_BFu17ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9s_BFu0c_BFu17ll) C1{ Fs:9 Fc:0 FL:17}



static void Test_BFu9s_BFu0c_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu9s_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu17ll, BFu9s_BFu0c_BFu17ll)
//============================================================================


struct  BFu9s_BFu0c_BFu1c  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9s_BFu0c_BFu1c) C1{ Fs:9 Fc:0 Fc:1}



static void Test_BFu9s_BFu0c_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu1c");
    static STRUCT_IF_C BFu9s_BFu0c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu1c, BFu9s_BFu0c_BFu1c)
//============================================================================


struct  BFu9s_BFu0c_BFu1i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9s_BFu0c_BFu1i) C1{ Fs:9 Fc:0 Fi:1}



static void Test_BFu9s_BFu0c_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu1i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu1i, BFu9s_BFu0c_BFu1i)
//============================================================================


struct  BFu9s_BFu0c_BFu1ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9s_BFu0c_BFu1ll) C1{ Fs:9 Fc:0 FL:1}



static void Test_BFu9s_BFu0c_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu1ll, BFu9s_BFu0c_BFu1ll)
//============================================================================


struct  BFu9s_BFu0c_BFu1s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9s_BFu0c_BFu1s) C1{ Fs:9 Fc:0 Fs:1}



static void Test_BFu9s_BFu0c_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu1s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu1s, BFu9s_BFu0c_BFu1s)
//============================================================================


struct  BFu9s_BFu0c_BFu31i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9s_BFu0c_BFu31i) C1{ Fs:9 Fc:0 Fi:31}



static void Test_BFu9s_BFu0c_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu31i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu31i, BFu9s_BFu0c_BFu31i)
//============================================================================


struct  BFu9s_BFu0c_BFu31ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9s_BFu0c_BFu31ll) C1{ Fs:9 Fc:0 FL:31}



static void Test_BFu9s_BFu0c_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu9s_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu31ll, BFu9s_BFu0c_BFu31ll)
//============================================================================


struct  BFu9s_BFu0c_BFu32i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9s_BFu0c_BFu32i) C1{ Fs:9 Fc:0 Fi:32}



static void Test_BFu9s_BFu0c_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu32i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu32i, BFu9s_BFu0c_BFu32i)
//============================================================================


struct  BFu9s_BFu0c_BFu32ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9s_BFu0c_BFu32ll) C1{ Fs:9 Fc:0 FL:32}



static void Test_BFu9s_BFu0c_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu9s_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu32ll, BFu9s_BFu0c_BFu32ll)
//============================================================================


struct  BFu9s_BFu0c_BFu33  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9s_BFu0c_BFu33) C1{ Fs:9 Fc:0 FL:33}



static void Test_BFu9s_BFu0c_BFu33()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu33");
    static STRUCT_IF_C BFu9s_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu9s_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu33, BFu9s_BFu0c_BFu33)
//============================================================================


struct  BFu9s_BFu0c_BFu7c  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9s_BFu0c_BFu7c) C1{ Fs:9 Fc:0 Fc:7}



static void Test_BFu9s_BFu0c_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu7c");
    static STRUCT_IF_C BFu9s_BFu0c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu7c, BFu9s_BFu0c_BFu7c)
//============================================================================


struct  BFu9s_BFu0c_BFu7i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9s_BFu0c_BFu7i) C1{ Fs:9 Fc:0 Fi:7}



static void Test_BFu9s_BFu0c_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu7i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu7i, BFu9s_BFu0c_BFu7i)
//============================================================================


struct  BFu9s_BFu0c_BFu7ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9s_BFu0c_BFu7ll) C1{ Fs:9 Fc:0 FL:7}



static void Test_BFu9s_BFu0c_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu7ll, BFu9s_BFu0c_BFu7ll)
//============================================================================


struct  BFu9s_BFu0c_BFu7s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9s_BFu0c_BFu7s) C1{ Fs:9 Fc:0 Fs:7}



static void Test_BFu9s_BFu0c_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu7s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu7s, BFu9s_BFu0c_BFu7s)
//============================================================================


struct  BFu9s_BFu0c_BFu8c  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9s_BFu0c_BFu8c) C1{ Fs:9 Fc:0 Fc:8}



static void Test_BFu9s_BFu0c_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu8c");
    static STRUCT_IF_C BFu9s_BFu0c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu8c, BFu9s_BFu0c_BFu8c)
//============================================================================


struct  BFu9s_BFu0c_BFu8i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9s_BFu0c_BFu8i) C1{ Fs:9 Fc:0 Fi:8}



static void Test_BFu9s_BFu0c_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu8i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu8i, BFu9s_BFu0c_BFu8i)
//============================================================================


struct  BFu9s_BFu0c_BFu8ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9s_BFu0c_BFu8ll) C1{ Fs:9 Fc:0 FL:8}



static void Test_BFu9s_BFu0c_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu8ll, BFu9s_BFu0c_BFu8ll)
//============================================================================


struct  BFu9s_BFu0c_BFu8s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9s_BFu0c_BFu8s) C1{ Fs:9 Fc:0 Fs:8}



static void Test_BFu9s_BFu0c_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu8s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu8s, BFu9s_BFu0c_BFu8s)
//============================================================================


struct  BFu9s_BFu0c_BFu9i  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9s_BFu0c_BFu9i) C1{ Fs:9 Fc:0 Fi:9}



static void Test_BFu9s_BFu0c_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu9i");
    static STRUCT_IF_C BFu9s_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu9i, BFu9s_BFu0c_BFu9i)
//============================================================================


struct  BFu9s_BFu0c_BFu9ll  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9s_BFu0c_BFu9ll) C1{ Fs:9 Fc:0 FL:9}



static void Test_BFu9s_BFu0c_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu9ll, BFu9s_BFu0c_BFu9ll)
//============================================================================


struct  BFu9s_BFu0c_BFu9s  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9s_BFu0c_BFu9s) C1{ Fs:9 Fc:0 Fs:9}



static void Test_BFu9s_BFu0c_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu0c_BFu9s");
    static STRUCT_IF_C BFu9s_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_BFu9s, BFu9s_BFu0c_BFu9s)
//============================================================================


struct  BFu9s_BFu0c_C  {
  unsigned short v1:9;
  unsigned char  :0;
  char v2;
};
//SIG(1 BFu9s_BFu0c_C) C1{ Fs:9 Fc:0 Fc}



static void Test_BFu9s_BFu0c_C()
{
  {
    init_simple_test("BFu9s_BFu0c_C");
    static STRUCT_IF_C BFu9s_BFu0c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_C");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_C, BFu9s_BFu0c_C)
//============================================================================


struct  BFu9s_BFu0c_D  {
  unsigned short v1:9;
  unsigned char  :0;
  double v2;
};
//SIG(1 BFu9s_BFu0c_D) C1{ Fs:9 Fc:0 FL}



static void Test_BFu9s_BFu0c_D()
{
  {
    init_simple_test("BFu9s_BFu0c_D");
    static STRUCT_IF_C BFu9s_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_D, BFu9s_BFu0c_D)
//============================================================================


struct  BFu9s_BFu0c_F  {
  unsigned short v1:9;
  unsigned char  :0;
  float v2;
};
//SIG(1 BFu9s_BFu0c_F) C1{ Fs:9 Fc:0 Fi}



static void Test_BFu9s_BFu0c_F()
{
  {
    init_simple_test("BFu9s_BFu0c_F");
    static STRUCT_IF_C BFu9s_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_F");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_F, BFu9s_BFu0c_F)
//============================================================================


struct  BFu9s_BFu0c_I  {
  unsigned short v1:9;
  unsigned char  :0;
  int v2;
};
//SIG(1 BFu9s_BFu0c_I) C1{ Fs:9 Fc:0 Fi}



static void Test_BFu9s_BFu0c_I()
{
  {
    init_simple_test("BFu9s_BFu0c_I");
    static STRUCT_IF_C BFu9s_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_I");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_I, BFu9s_BFu0c_I)
//============================================================================


struct  BFu9s_BFu0c_Ip  {
  unsigned short v1:9;
  unsigned char  :0;
  int *v2;
};
//SIG(1 BFu9s_BFu0c_Ip) C1{ Fs:9 Fc:0 Fp}



static void Test_BFu9s_BFu0c_Ip()
{
  {
    init_simple_test("BFu9s_BFu0c_Ip");
    static STRUCT_IF_C BFu9s_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_Ip, BFu9s_BFu0c_Ip)
//============================================================================


struct  BFu9s_BFu0c_L  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 BFu9s_BFu0c_L) C1{ Fs:9 Fc:0 FL}



static void Test_BFu9s_BFu0c_L()
{
  {
    init_simple_test("BFu9s_BFu0c_L");
    static STRUCT_IF_C BFu9s_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_L, BFu9s_BFu0c_L)
//============================================================================


struct  BFu9s_BFu0c_S  {
  unsigned short v1:9;
  unsigned char  :0;
  short v2;
};
//SIG(1 BFu9s_BFu0c_S) C1{ Fs:9 Fc:0 Fs}



static void Test_BFu9s_BFu0c_S()
{
  {
    init_simple_test("BFu9s_BFu0c_S");
    static STRUCT_IF_C BFu9s_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_S");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_S, BFu9s_BFu0c_S)
//============================================================================


struct  BFu9s_BFu0c_Uc  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 BFu9s_BFu0c_Uc) C1{ Fs:9 Fc:0 Fc}



static void Test_BFu9s_BFu0c_Uc()
{
  {
    init_simple_test("BFu9s_BFu0c_Uc");
    static STRUCT_IF_C BFu9s_BFu0c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_Uc, BFu9s_BFu0c_Uc)
//============================================================================


struct  BFu9s_BFu0c_Ui  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 BFu9s_BFu0c_Ui) C1{ Fs:9 Fc:0 Fi}



static void Test_BFu9s_BFu0c_Ui()
{
  {
    init_simple_test("BFu9s_BFu0c_Ui");
    static STRUCT_IF_C BFu9s_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_Ui, BFu9s_BFu0c_Ui)
//============================================================================


struct  BFu9s_BFu0c_Ul  {
  unsigned short v1:9;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 BFu9s_BFu0c_Ul) C1{ Fs:9 Fc:0 FL}



static void Test_BFu9s_BFu0c_Ul()
{
  {
    init_simple_test("BFu9s_BFu0c_Ul");
    static STRUCT_IF_C BFu9s_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_Ul, BFu9s_BFu0c_Ul)
//============================================================================


struct  BFu9s_BFu0c_Us  {
  unsigned short v1:9;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 BFu9s_BFu0c_Us) C1{ Fs:9 Fc:0 Fs}



static void Test_BFu9s_BFu0c_Us()
{
  {
    init_simple_test("BFu9s_BFu0c_Us");
    static STRUCT_IF_C BFu9s_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_Us");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_Us, BFu9s_BFu0c_Us)
//============================================================================


struct  BFu9s_BFu0c_Vp  {
  unsigned short v1:9;
  unsigned char  :0;
  void *v2;
};
//SIG(1 BFu9s_BFu0c_Vp) C1{ Fs:9 Fc:0 Fp}



static void Test_BFu9s_BFu0c_Vp()
{
  {
    init_simple_test("BFu9s_BFu0c_Vp");
    static STRUCT_IF_C BFu9s_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0c_Vp, BFu9s_BFu0c_Vp)
//============================================================================


struct  BFu9s_BFu0i  {
  unsigned short v1:9;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu0i) C1{ Fs:9 Fi:0}



static void Test_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i, BFu9s_BFu0i)
//============================================================================


struct  BFu9s_BFu0i_BFu0c  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu0i_BFu0c) C1{ Fs:9 Fi:0 Fc:0}



static void Test_BFu9s_BFu0i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu0c, BFu9s_BFu0i_BFu0c)
//============================================================================


struct  BFu9s_BFu0i_BFu0i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu0i_BFu0i) C1{ Fs:9 Fi:0 Fi:0}



static void Test_BFu9s_BFu0i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu0i, BFu9s_BFu0i_BFu0i)
//============================================================================


struct  BFu9s_BFu0i_BFu0ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu0i_BFu0ll) C1{ Fs:9 Fi:0 FL:0}



static void Test_BFu9s_BFu0i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu0ll, BFu9s_BFu0i_BFu0ll)
//============================================================================


struct  BFu9s_BFu0i_BFu0s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu0i_BFu0s) C1{ Fs:9 Fi:0 Fs:0}



static void Test_BFu9s_BFu0i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu0s, BFu9s_BFu0i_BFu0s)
//============================================================================


struct  BFu9s_BFu0i_BFu15i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9s_BFu0i_BFu15i) C1{ Fs:9 Fi:0 Fi:15}



static void Test_BFu9s_BFu0i_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu15i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu9s_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu15i, BFu9s_BFu0i_BFu15i)
//============================================================================


struct  BFu9s_BFu0i_BFu15ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9s_BFu0i_BFu15ll) C1{ Fs:9 Fi:0 FL:15}



static void Test_BFu9s_BFu0i_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu9s_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu15ll, BFu9s_BFu0i_BFu15ll)
//============================================================================


struct  BFu9s_BFu0i_BFu15s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9s_BFu0i_BFu15s) C1{ Fs:9 Fi:0 Fs:15}



static void Test_BFu9s_BFu0i_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu15s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "BFu9s_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu15s, BFu9s_BFu0i_BFu15s)
//============================================================================


struct  BFu9s_BFu0i_BFu16i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9s_BFu0i_BFu16i) C1{ Fs:9 Fi:0 Fi:16}



static void Test_BFu9s_BFu0i_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu16i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu9s_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu16i, BFu9s_BFu0i_BFu16i)
//============================================================================


struct  BFu9s_BFu0i_BFu16ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9s_BFu0i_BFu16ll) C1{ Fs:9 Fi:0 FL:16}



static void Test_BFu9s_BFu0i_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu9s_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu16ll, BFu9s_BFu0i_BFu16ll)
//============================================================================


struct  BFu9s_BFu0i_BFu16s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9s_BFu0i_BFu16s) C1{ Fs:9 Fi:0 Fs:16}



static void Test_BFu9s_BFu0i_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu16s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "BFu9s_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu16s, BFu9s_BFu0i_BFu16s)
//============================================================================


struct  BFu9s_BFu0i_BFu17i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9s_BFu0i_BFu17i) C1{ Fs:9 Fi:0 Fi:17}



static void Test_BFu9s_BFu0i_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu17i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9s_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu17i, BFu9s_BFu0i_BFu17i)
//============================================================================


struct  BFu9s_BFu0i_BFu17ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9s_BFu0i_BFu17ll) C1{ Fs:9 Fi:0 FL:17}



static void Test_BFu9s_BFu0i_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9s_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu17ll, BFu9s_BFu0i_BFu17ll)
//============================================================================


struct  BFu9s_BFu0i_BFu1c  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9s_BFu0i_BFu1c) C1{ Fs:9 Fi:0 Fc:1}



static void Test_BFu9s_BFu0i_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu1c");
    static STRUCT_IF_C BFu9s_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9s_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu1c, BFu9s_BFu0i_BFu1c)
//============================================================================


struct  BFu9s_BFu0i_BFu1i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9s_BFu0i_BFu1i) C1{ Fs:9 Fi:0 Fi:1}



static void Test_BFu9s_BFu0i_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu1i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9s_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu1i, BFu9s_BFu0i_BFu1i)
//============================================================================


struct  BFu9s_BFu0i_BFu1ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9s_BFu0i_BFu1ll) C1{ Fs:9 Fi:0 FL:1}



static void Test_BFu9s_BFu0i_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9s_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu1ll, BFu9s_BFu0i_BFu1ll)
//============================================================================


struct  BFu9s_BFu0i_BFu1s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9s_BFu0i_BFu1s) C1{ Fs:9 Fi:0 Fs:1}



static void Test_BFu9s_BFu0i_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu1s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "BFu9s_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu1s, BFu9s_BFu0i_BFu1s)
//============================================================================


struct  BFu9s_BFu0i_BFu31i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9s_BFu0i_BFu31i) C1{ Fs:9 Fi:0 Fi:31}



static void Test_BFu9s_BFu0i_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu31i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu31i, BFu9s_BFu0i_BFu31i)
//============================================================================


struct  BFu9s_BFu0i_BFu31ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9s_BFu0i_BFu31ll) C1{ Fs:9 Fi:0 FL:31}



static void Test_BFu9s_BFu0i_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu31ll, BFu9s_BFu0i_BFu31ll)
//============================================================================


struct  BFu9s_BFu0i_BFu32i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9s_BFu0i_BFu32i) C1{ Fs:9 Fi:0 Fi:32}



static void Test_BFu9s_BFu0i_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu32i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu32i, BFu9s_BFu0i_BFu32i)
//============================================================================


struct  BFu9s_BFu0i_BFu32ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9s_BFu0i_BFu32ll) C1{ Fs:9 Fi:0 FL:32}



static void Test_BFu9s_BFu0i_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu32ll, BFu9s_BFu0i_BFu32ll)
//============================================================================


struct  BFu9s_BFu0i_BFu33  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9s_BFu0i_BFu33) C1{ Fs:9 Fi:0 FL:33}



static void Test_BFu9s_BFu0i_BFu33()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu33");
    static STRUCT_IF_C BFu9s_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu9s_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9s_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu33, BFu9s_BFu0i_BFu33)
//============================================================================


struct  BFu9s_BFu0i_BFu7c  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9s_BFu0i_BFu7c) C1{ Fs:9 Fi:0 Fc:7}



static void Test_BFu9s_BFu0i_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu7c");
    static STRUCT_IF_C BFu9s_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9s_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu7c, BFu9s_BFu0i_BFu7c)
//============================================================================


struct  BFu9s_BFu0i_BFu7i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9s_BFu0i_BFu7i) C1{ Fs:9 Fi:0 Fi:7}



static void Test_BFu9s_BFu0i_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu7i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9s_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu7i, BFu9s_BFu0i_BFu7i)
//============================================================================


struct  BFu9s_BFu0i_BFu7ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9s_BFu0i_BFu7ll) C1{ Fs:9 Fi:0 FL:7}



static void Test_BFu9s_BFu0i_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9s_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu7ll, BFu9s_BFu0i_BFu7ll)
//============================================================================


struct  BFu9s_BFu0i_BFu7s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9s_BFu0i_BFu7s) C1{ Fs:9 Fi:0 Fs:7}



static void Test_BFu9s_BFu0i_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu7s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "BFu9s_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu7s, BFu9s_BFu0i_BFu7s)
//============================================================================


struct  BFu9s_BFu0i_BFu8c  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9s_BFu0i_BFu8c) C1{ Fs:9 Fi:0 Fc:8}



static void Test_BFu9s_BFu0i_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu8c");
    static STRUCT_IF_C BFu9s_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9s_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu8c, BFu9s_BFu0i_BFu8c)
//============================================================================


struct  BFu9s_BFu0i_BFu8i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9s_BFu0i_BFu8i) C1{ Fs:9 Fi:0 Fi:8}



static void Test_BFu9s_BFu0i_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu8i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9s_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu8i, BFu9s_BFu0i_BFu8i)
//============================================================================


struct  BFu9s_BFu0i_BFu8ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9s_BFu0i_BFu8ll) C1{ Fs:9 Fi:0 FL:8}



static void Test_BFu9s_BFu0i_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9s_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu8ll, BFu9s_BFu0i_BFu8ll)
//============================================================================


struct  BFu9s_BFu0i_BFu8s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9s_BFu0i_BFu8s) C1{ Fs:9 Fi:0 Fs:8}



static void Test_BFu9s_BFu0i_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu8s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "BFu9s_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu8s, BFu9s_BFu0i_BFu8s)
//============================================================================


struct  BFu9s_BFu0i_BFu9i  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9s_BFu0i_BFu9i) C1{ Fs:9 Fi:0 Fi:9}



static void Test_BFu9s_BFu0i_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu9i");
    static STRUCT_IF_C BFu9s_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu9s_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu9i, BFu9s_BFu0i_BFu9i)
//============================================================================


struct  BFu9s_BFu0i_BFu9ll  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9s_BFu0i_BFu9ll) C1{ Fs:9 Fi:0 FL:9}



static void Test_BFu9s_BFu0i_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu9s_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu9ll, BFu9s_BFu0i_BFu9ll)
//============================================================================


struct  BFu9s_BFu0i_BFu9s  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9s_BFu0i_BFu9s) C1{ Fs:9 Fi:0 Fs:9}



static void Test_BFu9s_BFu0i_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu0i_BFu9s");
    static STRUCT_IF_C BFu9s_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "BFu9s_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_BFu9s, BFu9s_BFu0i_BFu9s)
//============================================================================


struct  BFu9s_BFu0i_C  {
  unsigned short v1:9;
  unsigned int  :0;
  char v2;
};
//SIG(1 BFu9s_BFu0i_C) C1{ Fs:9 Fi:0 Fc}



static void Test_BFu9s_BFu0i_C()
{
  {
    init_simple_test("BFu9s_BFu0i_C");
    static STRUCT_IF_C BFu9s_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_C");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_C, BFu9s_BFu0i_C)
//============================================================================


struct  BFu9s_BFu0i_D  {
  unsigned short v1:9;
  unsigned int  :0;
  double v2;
};
//SIG(1 BFu9s_BFu0i_D) C1{ Fs:9 Fi:0 FL}



static void Test_BFu9s_BFu0i_D()
{
  {
    init_simple_test("BFu9s_BFu0i_D");
    static STRUCT_IF_C BFu9s_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_D, BFu9s_BFu0i_D)
//============================================================================


struct  BFu9s_BFu0i_F  {
  unsigned short v1:9;
  unsigned int  :0;
  float v2;
};
//SIG(1 BFu9s_BFu0i_F) C1{ Fs:9 Fi:0 Fi}



static void Test_BFu9s_BFu0i_F()
{
  {
    init_simple_test("BFu9s_BFu0i_F");
    static STRUCT_IF_C BFu9s_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_F");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_F, BFu9s_BFu0i_F)
//============================================================================


struct  BFu9s_BFu0i_I  {
  unsigned short v1:9;
  unsigned int  :0;
  int v2;
};
//SIG(1 BFu9s_BFu0i_I) C1{ Fs:9 Fi:0 Fi}



static void Test_BFu9s_BFu0i_I()
{
  {
    init_simple_test("BFu9s_BFu0i_I");
    static STRUCT_IF_C BFu9s_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_I");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_I, BFu9s_BFu0i_I)
//============================================================================


struct  BFu9s_BFu0i_Ip  {
  unsigned short v1:9;
  unsigned int  :0;
  int *v2;
};
//SIG(1 BFu9s_BFu0i_Ip) C1{ Fs:9 Fi:0 Fp}



static void Test_BFu9s_BFu0i_Ip()
{
  {
    init_simple_test("BFu9s_BFu0i_Ip");
    static STRUCT_IF_C BFu9s_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_Ip, BFu9s_BFu0i_Ip)
//============================================================================


struct  BFu9s_BFu0i_L  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 BFu9s_BFu0i_L) C1{ Fs:9 Fi:0 FL}



static void Test_BFu9s_BFu0i_L()
{
  {
    init_simple_test("BFu9s_BFu0i_L");
    static STRUCT_IF_C BFu9s_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_L, BFu9s_BFu0i_L)
//============================================================================


struct  BFu9s_BFu0i_S  {
  unsigned short v1:9;
  unsigned int  :0;
  short v2;
};
//SIG(1 BFu9s_BFu0i_S) C1{ Fs:9 Fi:0 Fs}



static void Test_BFu9s_BFu0i_S()
{
  {
    init_simple_test("BFu9s_BFu0i_S");
    static STRUCT_IF_C BFu9s_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_S");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_S, BFu9s_BFu0i_S)
//============================================================================


struct  BFu9s_BFu0i_Uc  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 BFu9s_BFu0i_Uc) C1{ Fs:9 Fi:0 Fc}



static void Test_BFu9s_BFu0i_Uc()
{
  {
    init_simple_test("BFu9s_BFu0i_Uc");
    static STRUCT_IF_C BFu9s_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_Uc");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_Uc, BFu9s_BFu0i_Uc)
//============================================================================


struct  BFu9s_BFu0i_Ui  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 BFu9s_BFu0i_Ui) C1{ Fs:9 Fi:0 Fi}



static void Test_BFu9s_BFu0i_Ui()
{
  {
    init_simple_test("BFu9s_BFu0i_Ui");
    static STRUCT_IF_C BFu9s_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_Ui, BFu9s_BFu0i_Ui)
//============================================================================


struct  BFu9s_BFu0i_Ul  {
  unsigned short v1:9;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 BFu9s_BFu0i_Ul) C1{ Fs:9 Fi:0 FL}



static void Test_BFu9s_BFu0i_Ul()
{
  {
    init_simple_test("BFu9s_BFu0i_Ul");
    static STRUCT_IF_C BFu9s_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_Ul, BFu9s_BFu0i_Ul)
//============================================================================


struct  BFu9s_BFu0i_Us  {
  unsigned short v1:9;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 BFu9s_BFu0i_Us) C1{ Fs:9 Fi:0 Fs}



static void Test_BFu9s_BFu0i_Us()
{
  {
    init_simple_test("BFu9s_BFu0i_Us");
    static STRUCT_IF_C BFu9s_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(BFu9s_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_Us");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_Us, BFu9s_BFu0i_Us)
//============================================================================


struct  BFu9s_BFu0i_Vp  {
  unsigned short v1:9;
  unsigned int  :0;
  void *v2;
};
//SIG(1 BFu9s_BFu0i_Vp) C1{ Fs:9 Fi:0 Fp}



static void Test_BFu9s_BFu0i_Vp()
{
  {
    init_simple_test("BFu9s_BFu0i_Vp");
    static STRUCT_IF_C BFu9s_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0i_Vp, BFu9s_BFu0i_Vp)
//============================================================================


struct  BFu9s_BFu0ll  {
  unsigned short v1:9;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu0ll) C1{ Fs:9 FL:0}



static void Test_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll, BFu9s_BFu0ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu0c  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu0ll_BFu0c) C1{ Fs:9 FL:0 Fc:0}



static void Test_BFu9s_BFu0ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu0c, BFu9s_BFu0ll_BFu0c)
//============================================================================


struct  BFu9s_BFu0ll_BFu0i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu0ll_BFu0i) C1{ Fs:9 FL:0 Fi:0}



static void Test_BFu9s_BFu0ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu0i, BFu9s_BFu0ll_BFu0i)
//============================================================================


struct  BFu9s_BFu0ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu0ll_BFu0ll) C1{ Fs:9 FL:0 FL:0}



static void Test_BFu9s_BFu0ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu0ll, BFu9s_BFu0ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu0s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu0ll_BFu0s) C1{ Fs:9 FL:0 Fs:0}



static void Test_BFu9s_BFu0ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu0s, BFu9s_BFu0ll_BFu0s)
//============================================================================


struct  BFu9s_BFu0ll_BFu15i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9s_BFu0ll_BFu15i) C1{ Fs:9 FL:0 Fi:15}



static void Test_BFu9s_BFu0ll_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu15i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu9s_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu15i, BFu9s_BFu0ll_BFu15i)
//============================================================================


struct  BFu9s_BFu0ll_BFu15ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9s_BFu0ll_BFu15ll) C1{ Fs:9 FL:0 FL:15}



static void Test_BFu9s_BFu0ll_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu9s_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu15ll, BFu9s_BFu0ll_BFu15ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu15s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9s_BFu0ll_BFu15s) C1{ Fs:9 FL:0 Fs:15}



static void Test_BFu9s_BFu0ll_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu15s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "BFu9s_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu15s, BFu9s_BFu0ll_BFu15s)
//============================================================================


struct  BFu9s_BFu0ll_BFu16i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9s_BFu0ll_BFu16i) C1{ Fs:9 FL:0 Fi:16}



static void Test_BFu9s_BFu0ll_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu16i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu9s_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu16i, BFu9s_BFu0ll_BFu16i)
//============================================================================


struct  BFu9s_BFu0ll_BFu16ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9s_BFu0ll_BFu16ll) C1{ Fs:9 FL:0 FL:16}



static void Test_BFu9s_BFu0ll_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu9s_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu16ll, BFu9s_BFu0ll_BFu16ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu16s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9s_BFu0ll_BFu16s) C1{ Fs:9 FL:0 Fs:16}



static void Test_BFu9s_BFu0ll_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu16s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "BFu9s_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu16s, BFu9s_BFu0ll_BFu16s)
//============================================================================


struct  BFu9s_BFu0ll_BFu17i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9s_BFu0ll_BFu17i) C1{ Fs:9 FL:0 Fi:17}



static void Test_BFu9s_BFu0ll_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu17i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu9s_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu17i, BFu9s_BFu0ll_BFu17i)
//============================================================================


struct  BFu9s_BFu0ll_BFu17ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9s_BFu0ll_BFu17ll) C1{ Fs:9 FL:0 FL:17}



static void Test_BFu9s_BFu0ll_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "BFu9s_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu17ll, BFu9s_BFu0ll_BFu17ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu1c  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9s_BFu0ll_BFu1c) C1{ Fs:9 FL:0 Fc:1}



static void Test_BFu9s_BFu0ll_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu1c");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu1c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9s_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu1c, BFu9s_BFu0ll_BFu1c)
//============================================================================


struct  BFu9s_BFu0ll_BFu1i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9s_BFu0ll_BFu1i) C1{ Fs:9 FL:0 Fi:1}



static void Test_BFu9s_BFu0ll_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu1i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu1i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9s_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu1i, BFu9s_BFu0ll_BFu1i)
//============================================================================


struct  BFu9s_BFu0ll_BFu1ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9s_BFu0ll_BFu1ll) C1{ Fs:9 FL:0 FL:1}



static void Test_BFu9s_BFu0ll_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu1ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9s_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu1ll, BFu9s_BFu0ll_BFu1ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu1s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9s_BFu0ll_BFu1s) C1{ Fs:9 FL:0 Fs:1}



static void Test_BFu9s_BFu0ll_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu1s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu1s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "BFu9s_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu1s, BFu9s_BFu0ll_BFu1s)
//============================================================================


struct  BFu9s_BFu0ll_BFu31i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9s_BFu0ll_BFu31i) C1{ Fs:9 FL:0 Fi:31}



static void Test_BFu9s_BFu0ll_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu31i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu9s_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu31i, BFu9s_BFu0ll_BFu31i)
//============================================================================


struct  BFu9s_BFu0ll_BFu31ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9s_BFu0ll_BFu31ll) C1{ Fs:9 FL:0 FL:31}



static void Test_BFu9s_BFu0ll_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "BFu9s_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu31ll, BFu9s_BFu0ll_BFu31ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu32i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9s_BFu0ll_BFu32i) C1{ Fs:9 FL:0 Fi:32}



static void Test_BFu9s_BFu0ll_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu32i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu9s_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu32i, BFu9s_BFu0ll_BFu32i)
//============================================================================


struct  BFu9s_BFu0ll_BFu32ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9s_BFu0ll_BFu32ll) C1{ Fs:9 FL:0 FL:32}



static void Test_BFu9s_BFu0ll_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "BFu9s_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu32ll, BFu9s_BFu0ll_BFu32ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu33  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9s_BFu0ll_BFu33) C1{ Fs:9 FL:0 FL:33}



static void Test_BFu9s_BFu0ll_BFu33()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu33");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "BFu9s_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu9s_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu33, BFu9s_BFu0ll_BFu33)
//============================================================================


struct  BFu9s_BFu0ll_BFu7c  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9s_BFu0ll_BFu7c) C1{ Fs:9 FL:0 Fc:7}



static void Test_BFu9s_BFu0ll_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu7c");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9s_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu7c, BFu9s_BFu0ll_BFu7c)
//============================================================================


struct  BFu9s_BFu0ll_BFu7i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9s_BFu0ll_BFu7i) C1{ Fs:9 FL:0 Fi:7}



static void Test_BFu9s_BFu0ll_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu7i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9s_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu7i, BFu9s_BFu0ll_BFu7i)
//============================================================================


struct  BFu9s_BFu0ll_BFu7ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9s_BFu0ll_BFu7ll) C1{ Fs:9 FL:0 FL:7}



static void Test_BFu9s_BFu0ll_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9s_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu7ll, BFu9s_BFu0ll_BFu7ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu7s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9s_BFu0ll_BFu7s) C1{ Fs:9 FL:0 Fs:7}



static void Test_BFu9s_BFu0ll_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu7s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "BFu9s_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu7s, BFu9s_BFu0ll_BFu7s)
//============================================================================


struct  BFu9s_BFu0ll_BFu8c  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9s_BFu0ll_BFu8c) C1{ Fs:9 FL:0 Fc:8}



static void Test_BFu9s_BFu0ll_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu8c");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9s_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu8c, BFu9s_BFu0ll_BFu8c)
//============================================================================


struct  BFu9s_BFu0ll_BFu8i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9s_BFu0ll_BFu8i) C1{ Fs:9 FL:0 Fi:8}



static void Test_BFu9s_BFu0ll_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu8i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9s_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu8i, BFu9s_BFu0ll_BFu8i)
//============================================================================


struct  BFu9s_BFu0ll_BFu8ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9s_BFu0ll_BFu8ll) C1{ Fs:9 FL:0 FL:8}



static void Test_BFu9s_BFu0ll_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9s_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu8ll, BFu9s_BFu0ll_BFu8ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu8s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9s_BFu0ll_BFu8s) C1{ Fs:9 FL:0 Fs:8}



static void Test_BFu9s_BFu0ll_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu8s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "BFu9s_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu8s, BFu9s_BFu0ll_BFu8s)
//============================================================================


struct  BFu9s_BFu0ll_BFu9i  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9s_BFu0ll_BFu9i) C1{ Fs:9 FL:0 Fi:9}



static void Test_BFu9s_BFu0ll_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu9i");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu9s_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu9i, BFu9s_BFu0ll_BFu9i)
//============================================================================


struct  BFu9s_BFu0ll_BFu9ll  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9s_BFu0ll_BFu9ll) C1{ Fs:9 FL:0 FL:9}



static void Test_BFu9s_BFu0ll_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu9s_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu9ll, BFu9s_BFu0ll_BFu9ll)
//============================================================================


struct  BFu9s_BFu0ll_BFu9s  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9s_BFu0ll_BFu9s) C1{ Fs:9 FL:0 Fs:9}



static void Test_BFu9s_BFu0ll_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu0ll_BFu9s");
    static STRUCT_IF_C BFu9s_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "BFu9s_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_BFu9s, BFu9s_BFu0ll_BFu9s)
//============================================================================


struct  BFu9s_BFu0ll_C  {
  unsigned short v1:9;
  __tsu64  :0;
  char v2;
};
//SIG(1 BFu9s_BFu0ll_C) C1{ Fs:9 FL:0 Fc}



static void Test_BFu9s_BFu0ll_C()
{
  {
    init_simple_test("BFu9s_BFu0ll_C");
    static STRUCT_IF_C BFu9s_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_C, BFu9s_BFu0ll_C)
//============================================================================


struct  BFu9s_BFu0ll_D  {
  unsigned short v1:9;
  __tsu64  :0;
  double v2;
};
//SIG(1 BFu9s_BFu0ll_D) C1{ Fs:9 FL:0 FL}



static void Test_BFu9s_BFu0ll_D()
{
  {
    init_simple_test("BFu9s_BFu0ll_D");
    static STRUCT_IF_C BFu9s_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_D, BFu9s_BFu0ll_D)
//============================================================================


struct  BFu9s_BFu0ll_F  {
  unsigned short v1:9;
  __tsu64  :0;
  float v2;
};
//SIG(1 BFu9s_BFu0ll_F) C1{ Fs:9 FL:0 Fi}



static void Test_BFu9s_BFu0ll_F()
{
  {
    init_simple_test("BFu9s_BFu0ll_F");
    static STRUCT_IF_C BFu9s_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_F, BFu9s_BFu0ll_F)
//============================================================================


struct  BFu9s_BFu0ll_I  {
  unsigned short v1:9;
  __tsu64  :0;
  int v2;
};
//SIG(1 BFu9s_BFu0ll_I) C1{ Fs:9 FL:0 Fi}



static void Test_BFu9s_BFu0ll_I()
{
  {
    init_simple_test("BFu9s_BFu0ll_I");
    static STRUCT_IF_C BFu9s_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_I, BFu9s_BFu0ll_I)
//============================================================================


struct  BFu9s_BFu0ll_Ip  {
  unsigned short v1:9;
  __tsu64  :0;
  int *v2;
};
//SIG(1 BFu9s_BFu0ll_Ip) C1{ Fs:9 FL:0 Fp}



static void Test_BFu9s_BFu0ll_Ip()
{
  {
    init_simple_test("BFu9s_BFu0ll_Ip");
    static STRUCT_IF_C BFu9s_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_Ip, BFu9s_BFu0ll_Ip)
//============================================================================


struct  BFu9s_BFu0ll_L  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 BFu9s_BFu0ll_L) C1{ Fs:9 FL:0 FL}



static void Test_BFu9s_BFu0ll_L()
{
  {
    init_simple_test("BFu9s_BFu0ll_L");
    static STRUCT_IF_C BFu9s_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_L, BFu9s_BFu0ll_L)
//============================================================================


struct  BFu9s_BFu0ll_S  {
  unsigned short v1:9;
  __tsu64  :0;
  short v2;
};
//SIG(1 BFu9s_BFu0ll_S) C1{ Fs:9 FL:0 Fs}



static void Test_BFu9s_BFu0ll_S()
{
  {
    init_simple_test("BFu9s_BFu0ll_S");
    static STRUCT_IF_C BFu9s_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_S, BFu9s_BFu0ll_S)
//============================================================================


struct  BFu9s_BFu0ll_Uc  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 BFu9s_BFu0ll_Uc) C1{ Fs:9 FL:0 Fc}



static void Test_BFu9s_BFu0ll_Uc()
{
  {
    init_simple_test("BFu9s_BFu0ll_Uc");
    static STRUCT_IF_C BFu9s_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_Uc, BFu9s_BFu0ll_Uc)
//============================================================================


struct  BFu9s_BFu0ll_Ui  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 BFu9s_BFu0ll_Ui) C1{ Fs:9 FL:0 Fi}



static void Test_BFu9s_BFu0ll_Ui()
{
  {
    init_simple_test("BFu9s_BFu0ll_Ui");
    static STRUCT_IF_C BFu9s_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(BFu9s_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu0ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_Ui, BFu9s_BFu0ll_Ui)
//============================================================================


struct  BFu9s_BFu0ll_Ul  {
  unsigned short v1:9;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 BFu9s_BFu0ll_Ul) C1{ Fs:9 FL:0 FL}



static void Test_BFu9s_BFu0ll_Ul()
{
  {
    init_simple_test("BFu9s_BFu0ll_Ul");
    static STRUCT_IF_C BFu9s_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_Ul, BFu9s_BFu0ll_Ul)
//============================================================================


struct  BFu9s_BFu0ll_Us  {
  unsigned short v1:9;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 BFu9s_BFu0ll_Us) C1{ Fs:9 FL:0 Fs}



static void Test_BFu9s_BFu0ll_Us()
{
  {
    init_simple_test("BFu9s_BFu0ll_Us");
    static STRUCT_IF_C BFu9s_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(BFu9s_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_Us, BFu9s_BFu0ll_Us)
//============================================================================


struct  BFu9s_BFu0ll_Vp  {
  unsigned short v1:9;
  __tsu64  :0;
  void *v2;
};
//SIG(1 BFu9s_BFu0ll_Vp) C1{ Fs:9 FL:0 Fp}



static void Test_BFu9s_BFu0ll_Vp()
{
  {
    init_simple_test("BFu9s_BFu0ll_Vp");
    static STRUCT_IF_C BFu9s_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0ll_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0ll_Vp, BFu9s_BFu0ll_Vp)
//============================================================================


struct  BFu9s_BFu0s  {
  unsigned short v1:9;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu0s) C1{ Fs:9 Fs:0}



static void Test_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s, BFu9s_BFu0s)
//============================================================================


struct  BFu9s_BFu0s_BFu0c  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu0s_BFu0c) C1{ Fs:9 Fs:0 Fc:0}



static void Test_BFu9s_BFu0s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu0s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu0c, BFu9s_BFu0s_BFu0c)
//============================================================================


struct  BFu9s_BFu0s_BFu0i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu0s_BFu0i) C1{ Fs:9 Fs:0 Fi:0}



static void Test_BFu9s_BFu0s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu0i, BFu9s_BFu0s_BFu0i)
//============================================================================


struct  BFu9s_BFu0s_BFu0ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu0s_BFu0ll) C1{ Fs:9 Fs:0 FL:0}



static void Test_BFu9s_BFu0s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu0s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu0ll, BFu9s_BFu0s_BFu0ll)
//============================================================================


struct  BFu9s_BFu0s_BFu0s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu0s_BFu0s) C1{ Fs:9 Fs:0 Fs:0}



static void Test_BFu9s_BFu0s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu0s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu0s, BFu9s_BFu0s_BFu0s)
//============================================================================


struct  BFu9s_BFu0s_BFu15i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 BFu9s_BFu0s_BFu15i) C1{ Fs:9 Fs:0 Fi:15}



static void Test_BFu9s_BFu0s_BFu15i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu15i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu15i, BFu9s_BFu0s_BFu15i)
//============================================================================


struct  BFu9s_BFu0s_BFu15ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 BFu9s_BFu0s_BFu15ll) C1{ Fs:9 Fs:0 FL:15}



static void Test_BFu9s_BFu0s_BFu15ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu15ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu15ll, BFu9s_BFu0s_BFu15ll)
//============================================================================


struct  BFu9s_BFu0s_BFu15s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 BFu9s_BFu0s_BFu15s) C1{ Fs:9 Fs:0 Fs:15}



static void Test_BFu9s_BFu0s_BFu15s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu15s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu15s, BFu9s_BFu0s_BFu15s)
//============================================================================


struct  BFu9s_BFu0s_BFu16i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 BFu9s_BFu0s_BFu16i) C1{ Fs:9 Fs:0 Fi:16}



static void Test_BFu9s_BFu0s_BFu16i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu16i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu16i, BFu9s_BFu0s_BFu16i)
//============================================================================


struct  BFu9s_BFu0s_BFu16ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 BFu9s_BFu0s_BFu16ll) C1{ Fs:9 Fs:0 FL:16}



static void Test_BFu9s_BFu0s_BFu16ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu16ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu16ll, BFu9s_BFu0s_BFu16ll)
//============================================================================


struct  BFu9s_BFu0s_BFu16s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 BFu9s_BFu0s_BFu16s) C1{ Fs:9 Fs:0 Fs:16}



static void Test_BFu9s_BFu0s_BFu16s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu16s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu16s, BFu9s_BFu0s_BFu16s)
//============================================================================


struct  BFu9s_BFu0s_BFu17i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 BFu9s_BFu0s_BFu17i) C1{ Fs:9 Fs:0 Fi:17}



static void Test_BFu9s_BFu0s_BFu17i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu17i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "BFu9s_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu17i, BFu9s_BFu0s_BFu17i)
//============================================================================


struct  BFu9s_BFu0s_BFu17ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 BFu9s_BFu0s_BFu17ll) C1{ Fs:9 Fs:0 FL:17}



static void Test_BFu9s_BFu0s_BFu17ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu17ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "BFu9s_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "BFu9s_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu17ll, BFu9s_BFu0s_BFu17ll)
//============================================================================


struct  BFu9s_BFu0s_BFu1c  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 BFu9s_BFu0s_BFu1c) C1{ Fs:9 Fs:0 Fc:1}



static void Test_BFu9s_BFu0s_BFu1c()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu1c");
    static STRUCT_IF_C BFu9s_BFu0s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu1c, BFu9s_BFu0s_BFu1c)
//============================================================================


struct  BFu9s_BFu0s_BFu1i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 BFu9s_BFu0s_BFu1i) C1{ Fs:9 Fs:0 Fi:1}



static void Test_BFu9s_BFu0s_BFu1i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu1i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu1i, BFu9s_BFu0s_BFu1i)
//============================================================================


struct  BFu9s_BFu0s_BFu1ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 BFu9s_BFu0s_BFu1ll) C1{ Fs:9 Fs:0 FL:1}



static void Test_BFu9s_BFu0s_BFu1ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu1ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu1ll, BFu9s_BFu0s_BFu1ll)
//============================================================================


struct  BFu9s_BFu0s_BFu1s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 BFu9s_BFu0s_BFu1s) C1{ Fs:9 Fs:0 Fs:1}



static void Test_BFu9s_BFu0s_BFu1s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu1s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "BFu9s_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu1s, BFu9s_BFu0s_BFu1s)
//============================================================================


struct  BFu9s_BFu0s_BFu31i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 BFu9s_BFu0s_BFu31i) C1{ Fs:9 Fs:0 Fi:31}



static void Test_BFu9s_BFu0s_BFu31i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu31i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu31i, BFu9s_BFu0s_BFu31i)
//============================================================================


struct  BFu9s_BFu0s_BFu31ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 BFu9s_BFu0s_BFu31ll) C1{ Fs:9 Fs:0 FL:31}



static void Test_BFu9s_BFu0s_BFu31ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu31ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "BFu9s_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu31ll, BFu9s_BFu0s_BFu31ll)
//============================================================================


struct  BFu9s_BFu0s_BFu32i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 BFu9s_BFu0s_BFu32i) C1{ Fs:9 Fs:0 Fi:32}



static void Test_BFu9s_BFu0s_BFu32i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu32i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu32i, BFu9s_BFu0s_BFu32i)
//============================================================================


struct  BFu9s_BFu0s_BFu32ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 BFu9s_BFu0s_BFu32ll) C1{ Fs:9 Fs:0 FL:32}



static void Test_BFu9s_BFu0s_BFu32ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu32ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "BFu9s_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu32ll, BFu9s_BFu0s_BFu32ll)
//============================================================================


struct  BFu9s_BFu0s_BFu33  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 BFu9s_BFu0s_BFu33) C1{ Fs:9 Fs:0 FL:33}



static void Test_BFu9s_BFu0s_BFu33()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu33");
    static STRUCT_IF_C BFu9s_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "BFu9s_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "BFu9s_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu33, BFu9s_BFu0s_BFu33)
//============================================================================


struct  BFu9s_BFu0s_BFu7c  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 BFu9s_BFu0s_BFu7c) C1{ Fs:9 Fs:0 Fc:7}



static void Test_BFu9s_BFu0s_BFu7c()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu7c");
    static STRUCT_IF_C BFu9s_BFu0s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu7c, BFu9s_BFu0s_BFu7c)
//============================================================================


struct  BFu9s_BFu0s_BFu7i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 BFu9s_BFu0s_BFu7i) C1{ Fs:9 Fs:0 Fi:7}



static void Test_BFu9s_BFu0s_BFu7i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu7i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu7i, BFu9s_BFu0s_BFu7i)
//============================================================================


struct  BFu9s_BFu0s_BFu7ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 BFu9s_BFu0s_BFu7ll) C1{ Fs:9 Fs:0 FL:7}



static void Test_BFu9s_BFu0s_BFu7ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu7ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu7ll, BFu9s_BFu0s_BFu7ll)
//============================================================================


struct  BFu9s_BFu0s_BFu7s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 BFu9s_BFu0s_BFu7s) C1{ Fs:9 Fs:0 Fs:7}



static void Test_BFu9s_BFu0s_BFu7s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu7s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu9s_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu9s_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu7s, BFu9s_BFu0s_BFu7s)
//============================================================================


struct  BFu9s_BFu0s_BFu8c  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 BFu9s_BFu0s_BFu8c) C1{ Fs:9 Fs:0 Fc:8}



static void Test_BFu9s_BFu0s_BFu8c()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu8c");
    static STRUCT_IF_C BFu9s_BFu0s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu8c, BFu9s_BFu0s_BFu8c)
//============================================================================


struct  BFu9s_BFu0s_BFu8i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 BFu9s_BFu0s_BFu8i) C1{ Fs:9 Fs:0 Fi:8}



static void Test_BFu9s_BFu0s_BFu8i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu8i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu8i, BFu9s_BFu0s_BFu8i)
//============================================================================


struct  BFu9s_BFu0s_BFu8ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 BFu9s_BFu0s_BFu8ll) C1{ Fs:9 Fs:0 FL:8}



static void Test_BFu9s_BFu0s_BFu8ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu8ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu8ll, BFu9s_BFu0s_BFu8ll)
//============================================================================


struct  BFu9s_BFu0s_BFu8s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 BFu9s_BFu0s_BFu8s) C1{ Fs:9 Fs:0 Fs:8}



static void Test_BFu9s_BFu0s_BFu8s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu8s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu8s, BFu9s_BFu0s_BFu8s)
//============================================================================


struct  BFu9s_BFu0s_BFu9i  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 BFu9s_BFu0s_BFu9i) C1{ Fs:9 Fs:0 Fi:9}



static void Test_BFu9s_BFu0s_BFu9i()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu9i");
    static STRUCT_IF_C BFu9s_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu9i, BFu9s_BFu0s_BFu9i)
//============================================================================


struct  BFu9s_BFu0s_BFu9ll  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 BFu9s_BFu0s_BFu9ll) C1{ Fs:9 Fs:0 FL:9}



static void Test_BFu9s_BFu0s_BFu9ll()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu9ll");
    static STRUCT_IF_C BFu9s_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu9ll, BFu9s_BFu0s_BFu9ll)
//============================================================================


struct  BFu9s_BFu0s_BFu9s  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 BFu9s_BFu0s_BFu9s) C1{ Fs:9 Fs:0 Fs:9}



static void Test_BFu9s_BFu0s_BFu9s()
{
  {
    init_simple_test("BFu9s_BFu0s_BFu9s");
    static STRUCT_IF_C BFu9s_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_BFu9s, BFu9s_BFu0s_BFu9s)
//============================================================================


struct  BFu9s_BFu0s_C  {
  unsigned short v1:9;
  unsigned short  :0;
  char v2;
};
//SIG(1 BFu9s_BFu0s_C) C1{ Fs:9 Fs:0 Fc}



static void Test_BFu9s_BFu0s_C()
{
  {
    init_simple_test("BFu9s_BFu0s_C");
    static STRUCT_IF_C BFu9s_BFu0s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_C)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_C");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_C");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_C, BFu9s_BFu0s_C)
//============================================================================


struct  BFu9s_BFu0s_D  {
  unsigned short v1:9;
  unsigned short  :0;
  double v2;
};
//SIG(1 BFu9s_BFu0s_D) C1{ Fs:9 Fs:0 FL}



static void Test_BFu9s_BFu0s_D()
{
  {
    init_simple_test("BFu9s_BFu0s_D");
    static STRUCT_IF_C BFu9s_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_D)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_D");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_D, BFu9s_BFu0s_D)
//============================================================================


struct  BFu9s_BFu0s_F  {
  unsigned short v1:9;
  unsigned short  :0;
  float v2;
};
//SIG(1 BFu9s_BFu0s_F) C1{ Fs:9 Fs:0 Fi}



static void Test_BFu9s_BFu0s_F()
{
  {
    init_simple_test("BFu9s_BFu0s_F");
    static STRUCT_IF_C BFu9s_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_F)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_F");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_F");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_F, BFu9s_BFu0s_F)
//============================================================================


struct  BFu9s_BFu0s_I  {
  unsigned short v1:9;
  unsigned short  :0;
  int v2;
};
//SIG(1 BFu9s_BFu0s_I) C1{ Fs:9 Fs:0 Fi}



static void Test_BFu9s_BFu0s_I()
{
  {
    init_simple_test("BFu9s_BFu0s_I");
    static STRUCT_IF_C BFu9s_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_I)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_I");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_I");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_I, BFu9s_BFu0s_I)
//============================================================================


struct  BFu9s_BFu0s_Ip  {
  unsigned short v1:9;
  unsigned short  :0;
  int *v2;
};
//SIG(1 BFu9s_BFu0s_Ip) C1{ Fs:9 Fs:0 Fp}



static void Test_BFu9s_BFu0s_Ip()
{
  {
    init_simple_test("BFu9s_BFu0s_Ip");
    static STRUCT_IF_C BFu9s_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_Ip, BFu9s_BFu0s_Ip)
//============================================================================


struct  BFu9s_BFu0s_L  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 BFu9s_BFu0s_L) C1{ Fs:9 Fs:0 FL}



static void Test_BFu9s_BFu0s_L()
{
  {
    init_simple_test("BFu9s_BFu0s_L");
    static STRUCT_IF_C BFu9s_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_L)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_L");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_L, BFu9s_BFu0s_L)
//============================================================================


struct  BFu9s_BFu0s_S  {
  unsigned short v1:9;
  unsigned short  :0;
  short v2;
};
//SIG(1 BFu9s_BFu0s_S) C1{ Fs:9 Fs:0 Fs}



static void Test_BFu9s_BFu0s_S()
{
  {
    init_simple_test("BFu9s_BFu0s_S");
    static STRUCT_IF_C BFu9s_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_S)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_S");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_S");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_S, BFu9s_BFu0s_S)
//============================================================================


struct  BFu9s_BFu0s_Uc  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 BFu9s_BFu0s_Uc) C1{ Fs:9 Fs:0 Fc}



static void Test_BFu9s_BFu0s_Uc()
{
  {
    init_simple_test("BFu9s_BFu0s_Uc");
    static STRUCT_IF_C BFu9s_BFu0s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_Uc");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_Uc, BFu9s_BFu0s_Uc)
//============================================================================


struct  BFu9s_BFu0s_Ui  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 BFu9s_BFu0s_Ui) C1{ Fs:9 Fs:0 Fi}



static void Test_BFu9s_BFu0s_Ui()
{
  {
    init_simple_test("BFu9s_BFu0s_Ui");
    static STRUCT_IF_C BFu9s_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu0s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_Ui");
    check_field_offset(lv, v2, 4, "BFu9s_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_Ui, BFu9s_BFu0s_Ui)
//============================================================================


struct  BFu9s_BFu0s_Ul  {
  unsigned short v1:9;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 BFu9s_BFu0s_Ul) C1{ Fs:9 Fs:0 FL}



static void Test_BFu9s_BFu0s_Ul()
{
  {
    init_simple_test("BFu9s_BFu0s_Ul");
    static STRUCT_IF_C BFu9s_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_Ul, BFu9s_BFu0s_Ul)
//============================================================================


struct  BFu9s_BFu0s_Us  {
  unsigned short v1:9;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 BFu9s_BFu0s_Us) C1{ Fs:9 Fs:0 Fs}



static void Test_BFu9s_BFu0s_Us()
{
  {
    init_simple_test("BFu9s_BFu0s_Us");
    static STRUCT_IF_C BFu9s_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu0s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_Us");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_Us");
    check_field_offset(lv, v2, 2, "BFu9s_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_Us, BFu9s_BFu0s_Us)
//============================================================================


struct  BFu9s_BFu0s_Vp  {
  unsigned short v1:9;
  unsigned short  :0;
  void *v2;
};
//SIG(1 BFu9s_BFu0s_Vp) C1{ Fs:9 Fs:0 Fp}



static void Test_BFu9s_BFu0s_Vp()
{
  {
    init_simple_test("BFu9s_BFu0s_Vp");
    static STRUCT_IF_C BFu9s_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu0s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu0s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu0s_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu0s_Vp, BFu9s_BFu0s_Vp)
//============================================================================


struct  BFu9s_BFu15i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu15i_BFu0c) C1{ Fs:9 Fi:15 Fc:0}



static void Test_BFu9s_BFu15i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu0c, BFu9s_BFu15i_BFu0c)
//============================================================================


struct  BFu9s_BFu15i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu15i_BFu0i) C1{ Fs:9 Fi:15 Fi:0}



static void Test_BFu9s_BFu15i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu0i, BFu9s_BFu15i_BFu0i)
//============================================================================


struct  BFu9s_BFu15i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu15i_BFu0ll) C1{ Fs:9 Fi:15 FL:0}



static void Test_BFu9s_BFu15i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu15i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu0ll, BFu9s_BFu15i_BFu0ll)
//============================================================================


struct  BFu9s_BFu15i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu15i_BFu0s) C1{ Fs:9 Fi:15 Fs:0}



static void Test_BFu9s_BFu15i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu15i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu15i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15i_BFu0s, BFu9s_BFu15i_BFu0s)
//============================================================================


struct  BFu9s_BFu15ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu15ll_BFu0c) C1{ Fs:9 FL:15 Fc:0}



static void Test_BFu9s_BFu15ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu0c, BFu9s_BFu15ll_BFu0c)
//============================================================================


struct  BFu9s_BFu15ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu15ll_BFu0i) C1{ Fs:9 FL:15 Fi:0}



static void Test_BFu9s_BFu15ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu0i, BFu9s_BFu15ll_BFu0i)
//============================================================================


struct  BFu9s_BFu15ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu15ll_BFu0ll) C1{ Fs:9 FL:15 FL:0}



static void Test_BFu9s_BFu15ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu0ll, BFu9s_BFu15ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu15ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu15ll_BFu0s) C1{ Fs:9 FL:15 Fs:0}



static void Test_BFu9s_BFu15ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu15ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu15ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, 1, "BFu9s_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 15, hide_ull(1LL<<14), "BFu9s_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15ll_BFu0s, BFu9s_BFu15ll_BFu0s)
//============================================================================


struct  BFu9s_BFu15s_BFu0c  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu15s_BFu0c) C1{ Fs:9 Fs:15 Fc:0}



static void Test_BFu9s_BFu15s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu0c, BFu9s_BFu15s_BFu0c)
//============================================================================


struct  BFu9s_BFu15s_BFu0i  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu15s_BFu0i) C1{ Fs:9 Fs:15 Fi:0}



static void Test_BFu9s_BFu15s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu15s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu0i, BFu9s_BFu15s_BFu0i)
//============================================================================


struct  BFu9s_BFu15s_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu15s_BFu0ll) C1{ Fs:9 Fs:15 FL:0}



static void Test_BFu9s_BFu15s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu15s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu0ll, BFu9s_BFu15s_BFu0ll)
//============================================================================


struct  BFu9s_BFu15s_BFu0s  {
  unsigned short v1:9;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu15s_BFu0s) C1{ Fs:9 Fs:15 Fs:0}



static void Test_BFu9s_BFu15s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu15s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu15s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu15s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu9s_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu9s_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu15s_BFu0s, BFu9s_BFu15s_BFu0s)
//============================================================================


struct  BFu9s_BFu16i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu16i_BFu0c) C1{ Fs:9 Fi:16 Fc:0}



static void Test_BFu9s_BFu16i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu0c, BFu9s_BFu16i_BFu0c)
//============================================================================


struct  BFu9s_BFu16i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu16i_BFu0i) C1{ Fs:9 Fi:16 Fi:0}



static void Test_BFu9s_BFu16i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu0i, BFu9s_BFu16i_BFu0i)
//============================================================================


struct  BFu9s_BFu16i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu16i_BFu0ll) C1{ Fs:9 Fi:16 FL:0}



static void Test_BFu9s_BFu16i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu16i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu0ll, BFu9s_BFu16i_BFu0ll)
//============================================================================


struct  BFu9s_BFu16i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu16i_BFu0s) C1{ Fs:9 Fi:16 Fs:0}



static void Test_BFu9s_BFu16i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu16i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu16i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16i_BFu0s, BFu9s_BFu16i_BFu0s)
//============================================================================


struct  BFu9s_BFu16ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu16ll_BFu0c) C1{ Fs:9 FL:16 Fc:0}



static void Test_BFu9s_BFu16ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu0c, BFu9s_BFu16ll_BFu0c)
//============================================================================


struct  BFu9s_BFu16ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu16ll_BFu0i) C1{ Fs:9 FL:16 Fi:0}



static void Test_BFu9s_BFu16ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu0i, BFu9s_BFu16ll_BFu0i)
//============================================================================


struct  BFu9s_BFu16ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu16ll_BFu0ll) C1{ Fs:9 FL:16 FL:0}



static void Test_BFu9s_BFu16ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu0ll, BFu9s_BFu16ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu16ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu16ll_BFu0s) C1{ Fs:9 FL:16 Fs:0}



static void Test_BFu9s_BFu16ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu16ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu16ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, 1, "BFu9s_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 16, hide_ull(1LL<<15), "BFu9s_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16ll_BFu0s, BFu9s_BFu16ll_BFu0s)
//============================================================================


struct  BFu9s_BFu16s_BFu0c  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu16s_BFu0c) C1{ Fs:9 Fs:16 Fc:0}



static void Test_BFu9s_BFu16s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu0c, BFu9s_BFu16s_BFu0c)
//============================================================================


struct  BFu9s_BFu16s_BFu0i  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu16s_BFu0i) C1{ Fs:9 Fs:16 Fi:0}



static void Test_BFu9s_BFu16s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu16s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu0i, BFu9s_BFu16s_BFu0i)
//============================================================================


struct  BFu9s_BFu16s_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu16s_BFu0ll) C1{ Fs:9 Fs:16 FL:0}



static void Test_BFu9s_BFu16s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu16s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu0ll, BFu9s_BFu16s_BFu0ll)
//============================================================================


struct  BFu9s_BFu16s_BFu0s  {
  unsigned short v1:9;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu16s_BFu0s) C1{ Fs:9 Fs:16 Fs:0}



static void Test_BFu9s_BFu16s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu16s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu16s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu16s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu9s_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu9s_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu16s_BFu0s, BFu9s_BFu16s_BFu0s)
//============================================================================


struct  BFu9s_BFu17i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu17i_BFu0c) C1{ Fs:9 Fi:17 Fc:0}



static void Test_BFu9s_BFu17i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu0c, BFu9s_BFu17i_BFu0c)
//============================================================================


struct  BFu9s_BFu17i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu17i_BFu0i) C1{ Fs:9 Fi:17 Fi:0}



static void Test_BFu9s_BFu17i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu0i, BFu9s_BFu17i_BFu0i)
//============================================================================


struct  BFu9s_BFu17i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu17i_BFu0ll) C1{ Fs:9 Fi:17 FL:0}



static void Test_BFu9s_BFu17i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu17i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu0ll, BFu9s_BFu17i_BFu0ll)
//============================================================================


struct  BFu9s_BFu17i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu17i_BFu0s) C1{ Fs:9 Fi:17 Fs:0}



static void Test_BFu9s_BFu17i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu17i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu17i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17i_BFu0s, BFu9s_BFu17i_BFu0s)
//============================================================================


struct  BFu9s_BFu17ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu17ll_BFu0c) C1{ Fs:9 FL:17 Fc:0}



static void Test_BFu9s_BFu17ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu0c, BFu9s_BFu17ll_BFu0c)
//============================================================================


struct  BFu9s_BFu17ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu17ll_BFu0i) C1{ Fs:9 FL:17 Fi:0}



static void Test_BFu9s_BFu17ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu0i, BFu9s_BFu17ll_BFu0i)
//============================================================================


struct  BFu9s_BFu17ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu17ll_BFu0ll) C1{ Fs:9 FL:17 FL:0}



static void Test_BFu9s_BFu17ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu0ll, BFu9s_BFu17ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu17ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu17ll_BFu0s) C1{ Fs:9 FL:17 Fs:0}



static void Test_BFu9s_BFu17ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu17ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu17ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, 1, "BFu9s_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 17, hide_ull(1LL<<16), "BFu9s_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu17ll_BFu0s, BFu9s_BFu17ll_BFu0s)
//============================================================================


struct  BFu9s_BFu1c_BFu0c  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu1c_BFu0c) C1{ Fs:9 Fc:1 Fc:0}



static void Test_BFu9s_BFu1c_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu0c");
    static STRUCT_IF_C BFu9s_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu0c, BFu9s_BFu1c_BFu0c)
//============================================================================


struct  BFu9s_BFu1c_BFu0i  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu1c_BFu0i) C1{ Fs:9 Fc:1 Fi:0}



static void Test_BFu9s_BFu1c_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu0i");
    static STRUCT_IF_C BFu9s_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu1c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu0i, BFu9s_BFu1c_BFu0i)
//============================================================================


struct  BFu9s_BFu1c_BFu0ll  {
  unsigned short v1:9;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu1c_BFu0ll) C1{ Fs:9 Fc:1 FL:0}



static void Test_BFu9s_BFu1c_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu1c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu0ll, BFu9s_BFu1c_BFu0ll)
//============================================================================


struct  BFu9s_BFu1c_BFu0s  {
  unsigned short v1:9;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu1c_BFu0s) C1{ Fs:9 Fc:1 Fs:0}



static void Test_BFu9s_BFu1c_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu1c_BFu0s");
    static STRUCT_IF_C BFu9s_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1c_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1c_BFu0s, BFu9s_BFu1c_BFu0s)
//============================================================================


struct  BFu9s_BFu1i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu1i_BFu0c) C1{ Fs:9 Fi:1 Fc:0}



static void Test_BFu9s_BFu1i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu0c, BFu9s_BFu1i_BFu0c)
//============================================================================


struct  BFu9s_BFu1i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu1i_BFu0i) C1{ Fs:9 Fi:1 Fi:0}



static void Test_BFu9s_BFu1i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu0i, BFu9s_BFu1i_BFu0i)
//============================================================================


struct  BFu9s_BFu1i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu1i_BFu0ll) C1{ Fs:9 Fi:1 FL:0}



static void Test_BFu9s_BFu1i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu1i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu0ll, BFu9s_BFu1i_BFu0ll)
//============================================================================


struct  BFu9s_BFu1i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu1i_BFu0s) C1{ Fs:9 Fi:1 Fs:0}



static void Test_BFu9s_BFu1i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu1i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu1i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1i_BFu0s, BFu9s_BFu1i_BFu0s)
//============================================================================


struct  BFu9s_BFu1ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu1ll_BFu0c) C1{ Fs:9 FL:1 Fc:0}



static void Test_BFu9s_BFu1ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu0c, BFu9s_BFu1ll_BFu0c)
//============================================================================


struct  BFu9s_BFu1ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu1ll_BFu0i) C1{ Fs:9 FL:1 Fi:0}



static void Test_BFu9s_BFu1ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu0i, BFu9s_BFu1ll_BFu0i)
//============================================================================


struct  BFu9s_BFu1ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu1ll_BFu0ll) C1{ Fs:9 FL:1 FL:0}



static void Test_BFu9s_BFu1ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu0ll, BFu9s_BFu1ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu1ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu1ll_BFu0s) C1{ Fs:9 FL:1 Fs:0}



static void Test_BFu9s_BFu1ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu1ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu1ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1ll_BFu0s, BFu9s_BFu1ll_BFu0s)
//============================================================================


struct  BFu9s_BFu1s_BFu0c  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu1s_BFu0c) C1{ Fs:9 Fs:1 Fc:0}



static void Test_BFu9s_BFu1s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu0c, BFu9s_BFu1s_BFu0c)
//============================================================================


struct  BFu9s_BFu1s_BFu0i  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu1s_BFu0i) C1{ Fs:9 Fs:1 Fi:0}



static void Test_BFu9s_BFu1s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu1s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu0i, BFu9s_BFu1s_BFu0i)
//============================================================================


struct  BFu9s_BFu1s_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu1s_BFu0ll) C1{ Fs:9 Fs:1 FL:0}



static void Test_BFu9s_BFu1s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu1s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu0ll, BFu9s_BFu1s_BFu0ll)
//============================================================================


struct  BFu9s_BFu1s_BFu0s  {
  unsigned short v1:9;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu1s_BFu0s) C1{ Fs:9 Fs:1 Fs:0}



static void Test_BFu9s_BFu1s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu1s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu1s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu1s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu1s_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 1, 1, "BFu9s_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu1s_BFu0s, BFu9s_BFu1s_BFu0s)
//============================================================================


struct  BFu9s_BFu31i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu31i_BFu0c) C1{ Fs:9 Fi:31 Fc:0}



static void Test_BFu9s_BFu31i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu0c, BFu9s_BFu31i_BFu0c)
//============================================================================


struct  BFu9s_BFu31i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu31i_BFu0i) C1{ Fs:9 Fi:31 Fi:0}



static void Test_BFu9s_BFu31i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu0i, BFu9s_BFu31i_BFu0i)
//============================================================================


struct  BFu9s_BFu31i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu31i_BFu0ll) C1{ Fs:9 Fi:31 FL:0}



static void Test_BFu9s_BFu31i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu31i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu0ll, BFu9s_BFu31i_BFu0ll)
//============================================================================


struct  BFu9s_BFu31i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu31i_BFu0s) C1{ Fs:9 Fi:31 Fs:0}



static void Test_BFu9s_BFu31i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu31i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu31i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu9s_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu9s_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31i_BFu0s, BFu9s_BFu31i_BFu0s)
//============================================================================


struct  BFu9s_BFu31ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu31ll_BFu0c) C1{ Fs:9 FL:31 Fc:0}



static void Test_BFu9s_BFu31ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu0c, BFu9s_BFu31ll_BFu0c)
//============================================================================


struct  BFu9s_BFu31ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu31ll_BFu0i) C1{ Fs:9 FL:31 Fi:0}



static void Test_BFu9s_BFu31ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu0i, BFu9s_BFu31ll_BFu0i)
//============================================================================


struct  BFu9s_BFu31ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu31ll_BFu0ll) C1{ Fs:9 FL:31 FL:0}



static void Test_BFu9s_BFu31ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu0ll, BFu9s_BFu31ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu31ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu31ll_BFu0s) C1{ Fs:9 FL:31 Fs:0}



static void Test_BFu9s_BFu31ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu31ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu31ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 31, 1, "BFu9s_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 31, hide_ull(1LL<<30), "BFu9s_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu31ll_BFu0s, BFu9s_BFu31ll_BFu0s)
//============================================================================


struct  BFu9s_BFu32i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu32i_BFu0c) C1{ Fs:9 Fi:32 Fc:0}



static void Test_BFu9s_BFu32i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu0c, BFu9s_BFu32i_BFu0c)
//============================================================================


struct  BFu9s_BFu32i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu32i_BFu0i) C1{ Fs:9 Fi:32 Fi:0}



static void Test_BFu9s_BFu32i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu0i, BFu9s_BFu32i_BFu0i)
//============================================================================


struct  BFu9s_BFu32i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu32i_BFu0ll) C1{ Fs:9 Fi:32 FL:0}



static void Test_BFu9s_BFu32i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu32i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu0ll, BFu9s_BFu32i_BFu0ll)
//============================================================================


struct  BFu9s_BFu32i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu32i_BFu0s) C1{ Fs:9 Fi:32 Fs:0}



static void Test_BFu9s_BFu32i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu32i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu32i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu9s_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu9s_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32i_BFu0s, BFu9s_BFu32i_BFu0s)
//============================================================================


struct  BFu9s_BFu32ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu32ll_BFu0c) C1{ Fs:9 FL:32 Fc:0}



static void Test_BFu9s_BFu32ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu0c, BFu9s_BFu32ll_BFu0c)
//============================================================================


struct  BFu9s_BFu32ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu32ll_BFu0i) C1{ Fs:9 FL:32 Fi:0}



static void Test_BFu9s_BFu32ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu0i, BFu9s_BFu32ll_BFu0i)
//============================================================================


struct  BFu9s_BFu32ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu32ll_BFu0ll) C1{ Fs:9 FL:32 FL:0}



static void Test_BFu9s_BFu32ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu0ll, BFu9s_BFu32ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu32ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu32ll_BFu0s) C1{ Fs:9 FL:32 Fs:0}



static void Test_BFu9s_BFu32ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu32ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu32ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 32, 1, "BFu9s_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 32, hide_ull(1LL<<31), "BFu9s_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu32ll_BFu0s, BFu9s_BFu32ll_BFu0s)
//============================================================================


struct  BFu9s_BFu33_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu33_BFu0c) C1{ Fs:9 FL:33 Fc:0}



static void Test_BFu9s_BFu33_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu33_BFu0c");
    static STRUCT_IF_C BFu9s_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu0c, BFu9s_BFu33_BFu0c)
//============================================================================


struct  BFu9s_BFu33_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu33_BFu0i) C1{ Fs:9 FL:33 Fi:0}



static void Test_BFu9s_BFu33_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu33_BFu0i");
    static STRUCT_IF_C BFu9s_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu0i, BFu9s_BFu33_BFu0i)
//============================================================================


struct  BFu9s_BFu33_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu33_BFu0ll) C1{ Fs:9 FL:33 FL:0}



static void Test_BFu9s_BFu33_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu33_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu0ll, BFu9s_BFu33_BFu0ll)
//============================================================================


struct  BFu9s_BFu33_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu33_BFu0s) C1{ Fs:9 FL:33 Fs:0}



static void Test_BFu9s_BFu33_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu33_BFu0s");
    static STRUCT_IF_C BFu9s_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu33_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu33_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 33, 1, "BFu9s_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 33, hide_ull(1LL<<32), "BFu9s_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu33_BFu0s, BFu9s_BFu33_BFu0s)
//============================================================================


struct  BFu9s_BFu7c_BFu0c  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu7c_BFu0c) C1{ Fs:9 Fc:7 Fc:0}



static void Test_BFu9s_BFu7c_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu0c");
    static STRUCT_IF_C BFu9s_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu7c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu0c, BFu9s_BFu7c_BFu0c)
//============================================================================


struct  BFu9s_BFu7c_BFu0i  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu7c_BFu0i) C1{ Fs:9 Fc:7 Fi:0}



static void Test_BFu9s_BFu7c_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu0i");
    static STRUCT_IF_C BFu9s_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu7c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu0i, BFu9s_BFu7c_BFu0i)
//============================================================================


struct  BFu9s_BFu7c_BFu0ll  {
  unsigned short v1:9;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu7c_BFu0ll) C1{ Fs:9 Fc:7 FL:0}



static void Test_BFu9s_BFu7c_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu7c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu0ll, BFu9s_BFu7c_BFu0ll)
//============================================================================


struct  BFu9s_BFu7c_BFu0s  {
  unsigned short v1:9;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu7c_BFu0s) C1{ Fs:9 Fc:7 Fs:0}



static void Test_BFu9s_BFu7c_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu7c_BFu0s");
    static STRUCT_IF_C BFu9s_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu7c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7c_BFu0s, BFu9s_BFu7c_BFu0s)
//============================================================================


struct  BFu9s_BFu7i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu7i_BFu0c) C1{ Fs:9 Fi:7 Fc:0}



static void Test_BFu9s_BFu7i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu0c, BFu9s_BFu7i_BFu0c)
//============================================================================


struct  BFu9s_BFu7i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu7i_BFu0i) C1{ Fs:9 Fi:7 Fi:0}



static void Test_BFu9s_BFu7i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu0i, BFu9s_BFu7i_BFu0i)
//============================================================================


struct  BFu9s_BFu7i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu7i_BFu0ll) C1{ Fs:9 Fi:7 FL:0}



static void Test_BFu9s_BFu7i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu7i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu0ll, BFu9s_BFu7i_BFu0ll)
//============================================================================


struct  BFu9s_BFu7i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu7i_BFu0s) C1{ Fs:9 Fi:7 Fs:0}



static void Test_BFu9s_BFu7i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu7i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu7i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7i_BFu0s, BFu9s_BFu7i_BFu0s)
//============================================================================


struct  BFu9s_BFu7ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu7ll_BFu0c) C1{ Fs:9 FL:7 Fc:0}



static void Test_BFu9s_BFu7ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu0c, BFu9s_BFu7ll_BFu0c)
//============================================================================


struct  BFu9s_BFu7ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu7ll_BFu0i) C1{ Fs:9 FL:7 Fi:0}



static void Test_BFu9s_BFu7ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu0i, BFu9s_BFu7ll_BFu0i)
//============================================================================


struct  BFu9s_BFu7ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu7ll_BFu0ll) C1{ Fs:9 FL:7 FL:0}



static void Test_BFu9s_BFu7ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu0ll, BFu9s_BFu7ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu7ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu7ll_BFu0s) C1{ Fs:9 FL:7 Fs:0}



static void Test_BFu9s_BFu7ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu7ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu7ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7ll_BFu0s, BFu9s_BFu7ll_BFu0s)
//============================================================================


struct  BFu9s_BFu7s_BFu0c  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu7s_BFu0c) C1{ Fs:9 Fs:7 Fc:0}



static void Test_BFu9s_BFu7s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu0c, BFu9s_BFu7s_BFu0c)
//============================================================================


struct  BFu9s_BFu7s_BFu0i  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu7s_BFu0i) C1{ Fs:9 Fs:7 Fi:0}



static void Test_BFu9s_BFu7s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu7s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu0i, BFu9s_BFu7s_BFu0i)
//============================================================================


struct  BFu9s_BFu7s_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu7s_BFu0ll) C1{ Fs:9 Fs:7 FL:0}



static void Test_BFu9s_BFu7s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu7s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu0ll, BFu9s_BFu7s_BFu0ll)
//============================================================================


struct  BFu9s_BFu7s_BFu0s  {
  unsigned short v1:9;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu7s_BFu0s) C1{ Fs:9 Fs:7 Fs:0}



static void Test_BFu9s_BFu7s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu7s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(BFu9s_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu7s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu7s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, 1, "BFu9s_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 7, hide_ull(1LL<<6), "BFu9s_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu7s_BFu0s, BFu9s_BFu7s_BFu0s)
//============================================================================


struct  BFu9s_BFu8c_BFu0c  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu8c_BFu0c) C1{ Fs:9 Fc:8 Fc:0}



static void Test_BFu9s_BFu8c_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu0c");
    static STRUCT_IF_C BFu9s_BFu8c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu0c, BFu9s_BFu8c_BFu0c)
//============================================================================


struct  BFu9s_BFu8c_BFu0i  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu8c_BFu0i) C1{ Fs:9 Fc:8 Fi:0}



static void Test_BFu9s_BFu8c_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu0i");
    static STRUCT_IF_C BFu9s_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu8c_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu0i, BFu9s_BFu8c_BFu0i)
//============================================================================


struct  BFu9s_BFu8c_BFu0ll  {
  unsigned short v1:9;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu8c_BFu0ll) C1{ Fs:9 Fc:8 FL:0}



static void Test_BFu9s_BFu8c_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu8c_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu0ll, BFu9s_BFu8c_BFu0ll)
//============================================================================


struct  BFu9s_BFu8c_BFu0s  {
  unsigned short v1:9;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu8c_BFu0s) C1{ Fs:9 Fc:8 Fs:0}



static void Test_BFu9s_BFu8c_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu8c_BFu0s");
    static STRUCT_IF_C BFu9s_BFu8c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8c_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8c_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8c_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8c_BFu0s, BFu9s_BFu8c_BFu0s)
//============================================================================


struct  BFu9s_BFu8i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu8i_BFu0c) C1{ Fs:9 Fi:8 Fc:0}



static void Test_BFu9s_BFu8i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu0c, BFu9s_BFu8i_BFu0c)
//============================================================================


struct  BFu9s_BFu8i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu8i_BFu0i) C1{ Fs:9 Fi:8 Fi:0}



static void Test_BFu9s_BFu8i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu0i, BFu9s_BFu8i_BFu0i)
//============================================================================


struct  BFu9s_BFu8i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu8i_BFu0ll) C1{ Fs:9 Fi:8 FL:0}



static void Test_BFu9s_BFu8i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu8i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu0ll, BFu9s_BFu8i_BFu0ll)
//============================================================================


struct  BFu9s_BFu8i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu8i_BFu0s) C1{ Fs:9 Fi:8 Fs:0}



static void Test_BFu9s_BFu8i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu8i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu8i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8i_BFu0s, BFu9s_BFu8i_BFu0s)
//============================================================================


struct  BFu9s_BFu8ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu8ll_BFu0c) C1{ Fs:9 FL:8 Fc:0}



static void Test_BFu9s_BFu8ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu0c, BFu9s_BFu8ll_BFu0c)
//============================================================================


struct  BFu9s_BFu8ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu8ll_BFu0i) C1{ Fs:9 FL:8 Fi:0}



static void Test_BFu9s_BFu8ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu0i, BFu9s_BFu8ll_BFu0i)
//============================================================================


struct  BFu9s_BFu8ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu8ll_BFu0ll) C1{ Fs:9 FL:8 FL:0}



static void Test_BFu9s_BFu8ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu0ll, BFu9s_BFu8ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu8ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu8ll_BFu0s) C1{ Fs:9 FL:8 Fs:0}



static void Test_BFu9s_BFu8ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu8ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu8ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, 1, "BFu9s_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 8, hide_ull(1LL<<7), "BFu9s_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8ll_BFu0s, BFu9s_BFu8ll_BFu0s)
//============================================================================


struct  BFu9s_BFu8s_BFu0c  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu8s_BFu0c) C1{ Fs:9 Fs:8 Fc:0}



static void Test_BFu9s_BFu8s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu8s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu0c, BFu9s_BFu8s_BFu0c)
//============================================================================


struct  BFu9s_BFu8s_BFu0i  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu8s_BFu0i) C1{ Fs:9 Fs:8 Fi:0}



static void Test_BFu9s_BFu8s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu8s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu0i, BFu9s_BFu8s_BFu0i)
//============================================================================


struct  BFu9s_BFu8s_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu8s_BFu0ll) C1{ Fs:9 Fs:8 FL:0}



static void Test_BFu9s_BFu8s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu8s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu0ll, BFu9s_BFu8s_BFu0ll)
//============================================================================


struct  BFu9s_BFu8s_BFu0s  {
  unsigned short v1:9;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu8s_BFu0s) C1{ Fs:9 Fs:8 Fs:0}



static void Test_BFu9s_BFu8s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu8s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu8s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu8s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu8s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu9s_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu9s_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu8s_BFu0s, BFu9s_BFu8s_BFu0s)
//============================================================================


struct  BFu9s_BFu9i_BFu0c  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu9i_BFu0c) C1{ Fs:9 Fi:9 Fc:0}



static void Test_BFu9s_BFu9i_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu0c");
    static STRUCT_IF_C BFu9s_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu0c, BFu9s_BFu9i_BFu0c)
//============================================================================


struct  BFu9s_BFu9i_BFu0i  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu9i_BFu0i) C1{ Fs:9 Fi:9 Fi:0}



static void Test_BFu9s_BFu9i_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu0i");
    static STRUCT_IF_C BFu9s_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu0i, BFu9s_BFu9i_BFu0i)
//============================================================================


struct  BFu9s_BFu9i_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu9i_BFu0ll) C1{ Fs:9 Fi:9 FL:0}



static void Test_BFu9s_BFu9i_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_BFu9i_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu0ll, BFu9s_BFu9i_BFu0ll)
//============================================================================


struct  BFu9s_BFu9i_BFu0s  {
  unsigned short v1:9;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu9i_BFu0s) C1{ Fs:9 Fi:9 Fs:0}



static void Test_BFu9s_BFu9i_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu9i_BFu0s");
    static STRUCT_IF_C BFu9s_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_BFu9i_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9i_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9i_BFu0s, BFu9s_BFu9i_BFu0s)
//============================================================================


struct  BFu9s_BFu9ll_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu9ll_BFu0c) C1{ Fs:9 FL:9 Fc:0}



static void Test_BFu9s_BFu9ll_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu0c");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu0c, BFu9s_BFu9ll_BFu0c)
//============================================================================


struct  BFu9s_BFu9ll_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu9ll_BFu0i) C1{ Fs:9 FL:9 Fi:0}



static void Test_BFu9s_BFu9ll_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu0i");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu0i, BFu9s_BFu9ll_BFu0i)
//============================================================================


struct  BFu9s_BFu9ll_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu9ll_BFu0ll) C1{ Fs:9 FL:9 FL:0}



static void Test_BFu9s_BFu9ll_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu0ll, BFu9s_BFu9ll_BFu0ll)
//============================================================================


struct  BFu9s_BFu9ll_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu9ll_BFu0s) C1{ Fs:9 FL:9 Fs:0}



static void Test_BFu9s_BFu9ll_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu9ll_BFu0s");
    static STRUCT_IF_C BFu9s_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_BFu9ll_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFu9s_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFu9s_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9ll_BFu0s, BFu9s_BFu9ll_BFu0s)
//============================================================================


struct  BFu9s_BFu9s_BFu0c  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 BFu9s_BFu9s_BFu0c) C1{ Fs:9 Fs:9 Fc:0}



static void Test_BFu9s_BFu9s_BFu0c()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu0c");
    static STRUCT_IF_C BFu9s_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu0c, BFu9s_BFu9s_BFu0c)
//============================================================================


struct  BFu9s_BFu9s_BFu0i  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 BFu9s_BFu9s_BFu0i) C1{ Fs:9 Fs:9 Fi:0}



static void Test_BFu9s_BFu9s_BFu0i()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu0i");
    static STRUCT_IF_C BFu9s_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu9s_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu0i, BFu9s_BFu9s_BFu0i)
//============================================================================


struct  BFu9s_BFu9s_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 BFu9s_BFu9s_BFu0ll) C1{ Fs:9 Fs:9 FL:0}



static void Test_BFu9s_BFu9s_BFu0ll()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu0ll");
    static STRUCT_IF_C BFu9s_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_BFu9s_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu0ll, BFu9s_BFu9s_BFu0ll)
//============================================================================


struct  BFu9s_BFu9s_BFu0s  {
  unsigned short v1:9;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 BFu9s_BFu9s_BFu0s) C1{ Fs:9 Fs:9 Fs:0}



static void Test_BFu9s_BFu9s_BFu0s()
{
  {
    init_simple_test("BFu9s_BFu9s_BFu0s");
    static STRUCT_IF_C BFu9s_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_BFu9s_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_BFu9s_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu9s_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu9s_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_BFu9s_BFu0s, BFu9s_BFu9s_BFu0s)
//============================================================================


struct  BFu9s_C_BFu0c  {
  unsigned short v1:9;
  char v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_C_BFu0c) C1{ Fs:9 Fc Fc:0}



static void Test_BFu9s_C_BFu0c()
{
  {
    init_simple_test("BFu9s_C_BFu0c");
    static STRUCT_IF_C BFu9s_C_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu0c, BFu9s_C_BFu0c)
//============================================================================


struct  BFu9s_C_BFu0i  {
  unsigned short v1:9;
  char v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_C_BFu0i) C1{ Fs:9 Fc Fi:0}



static void Test_BFu9s_C_BFu0i()
{
  {
    init_simple_test("BFu9s_C_BFu0i");
    static STRUCT_IF_C BFu9s_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_C_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu0i, BFu9s_C_BFu0i)
//============================================================================


struct  BFu9s_C_BFu0ll  {
  unsigned short v1:9;
  char v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_C_BFu0ll) C1{ Fs:9 Fc FL:0}



static void Test_BFu9s_C_BFu0ll()
{
  {
    init_simple_test("BFu9s_C_BFu0ll");
    static STRUCT_IF_C BFu9s_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_C_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu0ll, BFu9s_C_BFu0ll)
//============================================================================


struct  BFu9s_C_BFu0s  {
  unsigned short v1:9;
  char v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_C_BFu0s) C1{ Fs:9 Fc Fs:0}



static void Test_BFu9s_C_BFu0s()
{
  {
    init_simple_test("BFu9s_C_BFu0s");
    static STRUCT_IF_C BFu9s_C_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_C_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_C_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_C_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_C_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9s_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_C_BFu0s, BFu9s_C_BFu0s)
//============================================================================


struct  BFu9s_D_BFu0c  {
  unsigned short v1:9;
  double v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_D_BFu0c) C1{ Fs:9 FL Fc:0}



static void Test_BFu9s_D_BFu0c()
{
  {
    init_simple_test("BFu9s_D_BFu0c");
    static STRUCT_IF_C BFu9s_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu0c, BFu9s_D_BFu0c)
//============================================================================


struct  BFu9s_D_BFu0i  {
  unsigned short v1:9;
  double v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_D_BFu0i) C1{ Fs:9 FL Fi:0}



static void Test_BFu9s_D_BFu0i()
{
  {
    init_simple_test("BFu9s_D_BFu0i");
    static STRUCT_IF_C BFu9s_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu0i, BFu9s_D_BFu0i)
//============================================================================


struct  BFu9s_D_BFu0ll  {
  unsigned short v1:9;
  double v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_D_BFu0ll) C1{ Fs:9 FL FL:0}



static void Test_BFu9s_D_BFu0ll()
{
  {
    init_simple_test("BFu9s_D_BFu0ll");
    static STRUCT_IF_C BFu9s_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu0ll, BFu9s_D_BFu0ll)
//============================================================================


struct  BFu9s_D_BFu0s  {
  unsigned short v1:9;
  double v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_D_BFu0s) C1{ Fs:9 FL Fs:0}



static void Test_BFu9s_D_BFu0s()
{
  {
    init_simple_test("BFu9s_D_BFu0s");
    static STRUCT_IF_C BFu9s_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_D_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_D_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_D_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_D_BFu0s, BFu9s_D_BFu0s)
//============================================================================


struct  BFu9s_F_BFu0c  {
  unsigned short v1:9;
  float v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_F_BFu0c) C1{ Fs:9 Fi Fc:0}



static void Test_BFu9s_F_BFu0c()
{
  {
    init_simple_test("BFu9s_F_BFu0c");
    static STRUCT_IF_C BFu9s_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu0c");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu0c, BFu9s_F_BFu0c)
//============================================================================


struct  BFu9s_F_BFu0i  {
  unsigned short v1:9;
  float v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_F_BFu0i) C1{ Fs:9 Fi Fi:0}



static void Test_BFu9s_F_BFu0i()
{
  {
    init_simple_test("BFu9s_F_BFu0i");
    static STRUCT_IF_C BFu9s_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu0i");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu0i, BFu9s_F_BFu0i)
//============================================================================


struct  BFu9s_F_BFu0ll  {
  unsigned short v1:9;
  float v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_F_BFu0ll) C1{ Fs:9 Fi FL:0}



static void Test_BFu9s_F_BFu0ll()
{
  {
    init_simple_test("BFu9s_F_BFu0ll");
    static STRUCT_IF_C BFu9s_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_F_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu0ll, BFu9s_F_BFu0ll)
//============================================================================


struct  BFu9s_F_BFu0s  {
  unsigned short v1:9;
  float v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_F_BFu0s) C1{ Fs:9 Fi Fs:0}



static void Test_BFu9s_F_BFu0s()
{
  {
    init_simple_test("BFu9s_F_BFu0s");
    static STRUCT_IF_C BFu9s_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_F_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_F_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_F_BFu0s");
    check_field_offset(lv, v2, 4, "BFu9s_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_F_BFu0s, BFu9s_F_BFu0s)
//============================================================================


struct  BFu9s_I_BFu0c  {
  unsigned short v1:9;
  int v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_I_BFu0c) C1{ Fs:9 Fi Fc:0}



static void Test_BFu9s_I_BFu0c()
{
  {
    init_simple_test("BFu9s_I_BFu0c");
    static STRUCT_IF_C BFu9s_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu0c");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu0c, BFu9s_I_BFu0c)
//============================================================================


struct  BFu9s_I_BFu0i  {
  unsigned short v1:9;
  int v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_I_BFu0i) C1{ Fs:9 Fi Fi:0}



static void Test_BFu9s_I_BFu0i()
{
  {
    init_simple_test("BFu9s_I_BFu0i");
    static STRUCT_IF_C BFu9s_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu0i");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu0i, BFu9s_I_BFu0i)
//============================================================================


struct  BFu9s_I_BFu0ll  {
  unsigned short v1:9;
  int v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_I_BFu0ll) C1{ Fs:9 Fi FL:0}



static void Test_BFu9s_I_BFu0ll()
{
  {
    init_simple_test("BFu9s_I_BFu0ll");
    static STRUCT_IF_C BFu9s_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_I_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu0ll, BFu9s_I_BFu0ll)
//============================================================================


struct  BFu9s_I_BFu0s  {
  unsigned short v1:9;
  int v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_I_BFu0s) C1{ Fs:9 Fi Fs:0}



static void Test_BFu9s_I_BFu0s()
{
  {
    init_simple_test("BFu9s_I_BFu0s");
    static STRUCT_IF_C BFu9s_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_I_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_I_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_I_BFu0s");
    check_field_offset(lv, v2, 4, "BFu9s_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_I_BFu0s, BFu9s_I_BFu0s)
//============================================================================


struct  BFu9s_Ip_BFu0c  {
  unsigned short v1:9;
  int *v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_Ip_BFu0c) C1{ Fs:9 Fp Fc:0}



static void Test_BFu9s_Ip_BFu0c()
{
  {
    init_simple_test("BFu9s_Ip_BFu0c");
    static STRUCT_IF_C BFu9s_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu0c, BFu9s_Ip_BFu0c)
//============================================================================


struct  BFu9s_Ip_BFu0i  {
  unsigned short v1:9;
  int *v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_Ip_BFu0i) C1{ Fs:9 Fp Fi:0}



static void Test_BFu9s_Ip_BFu0i()
{
  {
    init_simple_test("BFu9s_Ip_BFu0i");
    static STRUCT_IF_C BFu9s_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu0i, BFu9s_Ip_BFu0i)
//============================================================================


struct  BFu9s_Ip_BFu0ll  {
  unsigned short v1:9;
  int *v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_Ip_BFu0ll) C1{ Fs:9 Fp FL:0}



static void Test_BFu9s_Ip_BFu0ll()
{
  {
    init_simple_test("BFu9s_Ip_BFu0ll");
    static STRUCT_IF_C BFu9s_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu0ll, BFu9s_Ip_BFu0ll)
//============================================================================


struct  BFu9s_Ip_BFu0s  {
  unsigned short v1:9;
  int *v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_Ip_BFu0s) C1{ Fs:9 Fp Fs:0}



static void Test_BFu9s_Ip_BFu0s()
{
  {
    init_simple_test("BFu9s_Ip_BFu0s");
    static STRUCT_IF_C BFu9s_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ip_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ip_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ip_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ip_BFu0s, BFu9s_Ip_BFu0s)
//============================================================================


struct  BFu9s_L_BFu0c  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_L_BFu0c) C1{ Fs:9 FL Fc:0}



static void Test_BFu9s_L_BFu0c()
{
  {
    init_simple_test("BFu9s_L_BFu0c");
    static STRUCT_IF_C BFu9s_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu0c, BFu9s_L_BFu0c)
//============================================================================


struct  BFu9s_L_BFu0i  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_L_BFu0i) C1{ Fs:9 FL Fi:0}



static void Test_BFu9s_L_BFu0i()
{
  {
    init_simple_test("BFu9s_L_BFu0i");
    static STRUCT_IF_C BFu9s_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu0i, BFu9s_L_BFu0i)
//============================================================================


struct  BFu9s_L_BFu0ll  {
  unsigned short v1:9;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_L_BFu0ll) C1{ Fs:9 FL FL:0}



static void Test_BFu9s_L_BFu0ll()
{
  {
    init_simple_test("BFu9s_L_BFu0ll");
    static STRUCT_IF_C BFu9s_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu0ll, BFu9s_L_BFu0ll)
//============================================================================


struct  BFu9s_L_BFu0s  {
  unsigned short v1:9;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_L_BFu0s) C1{ Fs:9 FL Fs:0}



static void Test_BFu9s_L_BFu0s()
{
  {
    init_simple_test("BFu9s_L_BFu0s");
    static STRUCT_IF_C BFu9s_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_L_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_L_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_L_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_L_BFu0s, BFu9s_L_BFu0s)
//============================================================================


struct  BFu9s_S_BFu0c  {
  unsigned short v1:9;
  short v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_S_BFu0c) C1{ Fs:9 Fs Fc:0}



static void Test_BFu9s_S_BFu0c()
{
  {
    init_simple_test("BFu9s_S_BFu0c");
    static STRUCT_IF_C BFu9s_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu0c, BFu9s_S_BFu0c)
//============================================================================


struct  BFu9s_S_BFu0i  {
  unsigned short v1:9;
  short v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_S_BFu0i) C1{ Fs:9 Fs Fi:0}



static void Test_BFu9s_S_BFu0i()
{
  {
    init_simple_test("BFu9s_S_BFu0i");
    static STRUCT_IF_C BFu9s_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_S_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu0i, BFu9s_S_BFu0i)
//============================================================================


struct  BFu9s_S_BFu0ll  {
  unsigned short v1:9;
  short v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_S_BFu0ll) C1{ Fs:9 Fs FL:0}



static void Test_BFu9s_S_BFu0ll()
{
  {
    init_simple_test("BFu9s_S_BFu0ll");
    static STRUCT_IF_C BFu9s_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_S_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu0ll, BFu9s_S_BFu0ll)
//============================================================================


struct  BFu9s_S_BFu0s  {
  unsigned short v1:9;
  short v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_S_BFu0s) C1{ Fs:9 Fs Fs:0}



static void Test_BFu9s_S_BFu0s()
{
  {
    init_simple_test("BFu9s_S_BFu0s");
    static STRUCT_IF_C BFu9s_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_S_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_S_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_S_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9s_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_S_BFu0s, BFu9s_S_BFu0s)
//============================================================================


struct  BFu9s_Uc_BFu0c  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_Uc_BFu0c) C1{ Fs:9 Fc Fc:0}



static void Test_BFu9s_Uc_BFu0c()
{
  {
    init_simple_test("BFu9s_Uc_BFu0c");
    static STRUCT_IF_C BFu9s_Uc_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu0c, BFu9s_Uc_BFu0c)
//============================================================================


struct  BFu9s_Uc_BFu0i  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_Uc_BFu0i) C1{ Fs:9 Fc Fi:0}



static void Test_BFu9s_Uc_BFu0i()
{
  {
    init_simple_test("BFu9s_Uc_BFu0i");
    static STRUCT_IF_C BFu9s_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_Uc_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu0i, BFu9s_Uc_BFu0i)
//============================================================================


struct  BFu9s_Uc_BFu0ll  {
  unsigned short v1:9;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_Uc_BFu0ll) C1{ Fs:9 Fc FL:0}



static void Test_BFu9s_Uc_BFu0ll()
{
  {
    init_simple_test("BFu9s_Uc_BFu0ll");
    static STRUCT_IF_C BFu9s_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_Uc_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu0ll, BFu9s_Uc_BFu0ll)
//============================================================================


struct  BFu9s_Uc_BFu0s  {
  unsigned short v1:9;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_Uc_BFu0s) C1{ Fs:9 Fc Fs:0}



static void Test_BFu9s_Uc_BFu0s()
{
  {
    init_simple_test("BFu9s_Uc_BFu0s");
    static STRUCT_IF_C BFu9s_Uc_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Uc_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Uc_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Uc_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Uc_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9s_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Uc_BFu0s, BFu9s_Uc_BFu0s)
//============================================================================


struct  BFu9s_Ui_BFu0c  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_Ui_BFu0c) C1{ Fs:9 Fi Fc:0}



static void Test_BFu9s_Ui_BFu0c()
{
  {
    init_simple_test("BFu9s_Ui_BFu0c");
    static STRUCT_IF_C BFu9s_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu0c");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu0c, BFu9s_Ui_BFu0c)
//============================================================================


struct  BFu9s_Ui_BFu0i  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_Ui_BFu0i) C1{ Fs:9 Fi Fi:0}



static void Test_BFu9s_Ui_BFu0i()
{
  {
    init_simple_test("BFu9s_Ui_BFu0i");
    static STRUCT_IF_C BFu9s_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu0i");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu0i, BFu9s_Ui_BFu0i)
//============================================================================


struct  BFu9s_Ui_BFu0ll  {
  unsigned short v1:9;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_Ui_BFu0ll) C1{ Fs:9 Fi FL:0}



static void Test_BFu9s_Ui_BFu0ll()
{
  {
    init_simple_test("BFu9s_Ui_BFu0ll");
    static STRUCT_IF_C BFu9s_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(BFu9s_Ui_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu0ll");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu0ll, BFu9s_Ui_BFu0ll)
//============================================================================


struct  BFu9s_Ui_BFu0s  {
  unsigned short v1:9;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_Ui_BFu0s) C1{ Fs:9 Fi Fs:0}



static void Test_BFu9s_Ui_BFu0s()
{
  {
    init_simple_test("BFu9s_Ui_BFu0s");
    static STRUCT_IF_C BFu9s_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(BFu9s_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu9s_Ui_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ui_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ui_BFu0s");
    check_field_offset(lv, v2, 4, "BFu9s_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ui_BFu0s, BFu9s_Ui_BFu0s)
//============================================================================


struct  BFu9s_Ul_BFu0c  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_Ul_BFu0c) C1{ Fs:9 FL Fc:0}



static void Test_BFu9s_Ul_BFu0c()
{
  {
    init_simple_test("BFu9s_Ul_BFu0c");
    static STRUCT_IF_C BFu9s_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu0c, BFu9s_Ul_BFu0c)
//============================================================================


struct  BFu9s_Ul_BFu0i  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_Ul_BFu0i) C1{ Fs:9 FL Fi:0}



static void Test_BFu9s_Ul_BFu0i()
{
  {
    init_simple_test("BFu9s_Ul_BFu0i");
    static STRUCT_IF_C BFu9s_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu0i, BFu9s_Ul_BFu0i)
//============================================================================


struct  BFu9s_Ul_BFu0ll  {
  unsigned short v1:9;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_Ul_BFu0ll) C1{ Fs:9 FL FL:0}



static void Test_BFu9s_Ul_BFu0ll()
{
  {
    init_simple_test("BFu9s_Ul_BFu0ll");
    static STRUCT_IF_C BFu9s_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu0ll, BFu9s_Ul_BFu0ll)
//============================================================================


struct  BFu9s_Ul_BFu0s  {
  unsigned short v1:9;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_Ul_BFu0s) C1{ Fs:9 FL Fs:0}



static void Test_BFu9s_Ul_BFu0s()
{
  {
    init_simple_test("BFu9s_Ul_BFu0s");
    static STRUCT_IF_C BFu9s_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu9s_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Ul_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Ul_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Ul_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Ul_BFu0s, BFu9s_Ul_BFu0s)
//============================================================================


struct  BFu9s_Us_BFu0c  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_Us_BFu0c) C1{ Fs:9 Fs Fc:0}



static void Test_BFu9s_Us_BFu0c()
{
  {
    init_simple_test("BFu9s_Us_BFu0c");
    static STRUCT_IF_C BFu9s_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu0c");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu0c, BFu9s_Us_BFu0c)
//============================================================================


struct  BFu9s_Us_BFu0i  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_Us_BFu0i) C1{ Fs:9 Fs Fi:0}



static void Test_BFu9s_Us_BFu0i()
{
  {
    init_simple_test("BFu9s_Us_BFu0i");
    static STRUCT_IF_C BFu9s_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_Us_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu0i");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu0i, BFu9s_Us_BFu0i)
//============================================================================


struct  BFu9s_Us_BFu0ll  {
  unsigned short v1:9;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_Us_BFu0ll) C1{ Fs:9 Fs FL:0}



static void Test_BFu9s_Us_BFu0ll()
{
  {
    init_simple_test("BFu9s_Us_BFu0ll");
    static STRUCT_IF_C BFu9s_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu9s_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(BFu9s_Us_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu0ll");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu0ll, BFu9s_Us_BFu0ll)
//============================================================================


struct  BFu9s_Us_BFu0s  {
  unsigned short v1:9;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_Us_BFu0s) C1{ Fs:9 Fs Fs:0}



static void Test_BFu9s_Us_BFu0s()
{
  {
    init_simple_test("BFu9s_Us_BFu0s");
    static STRUCT_IF_C BFu9s_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(BFu9s_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu9s_Us_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Us_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Us_BFu0s");
    check_field_offset(lv, v2, 2, "BFu9s_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Us_BFu0s, BFu9s_Us_BFu0s)
//============================================================================


struct  BFu9s_Vp_BFu0c  {
  unsigned short v1:9;
  void *v2;
  unsigned char  :0;
};
//SIG(1 BFu9s_Vp_BFu0c) C1{ Fs:9 Fp Fc:0}



static void Test_BFu9s_Vp_BFu0c()
{
  {
    init_simple_test("BFu9s_Vp_BFu0c");
    static STRUCT_IF_C BFu9s_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu0c)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu0c");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu0c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu0c, BFu9s_Vp_BFu0c)
//============================================================================


struct  BFu9s_Vp_BFu0i  {
  unsigned short v1:9;
  void *v2;
  unsigned int  :0;
};
//SIG(1 BFu9s_Vp_BFu0i) C1{ Fs:9 Fp Fi:0}



static void Test_BFu9s_Vp_BFu0i()
{
  {
    init_simple_test("BFu9s_Vp_BFu0i");
    static STRUCT_IF_C BFu9s_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu0i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu0i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu0i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu0i, BFu9s_Vp_BFu0i)
//============================================================================


struct  BFu9s_Vp_BFu0ll  {
  unsigned short v1:9;
  void *v2;
  __tsu64  :0;
};
//SIG(1 BFu9s_Vp_BFu0ll) C1{ Fs:9 Fp FL:0}



static void Test_BFu9s_Vp_BFu0ll()
{
  {
    init_simple_test("BFu9s_Vp_BFu0ll");
    static STRUCT_IF_C BFu9s_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu0ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu0ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu0ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu0ll, BFu9s_Vp_BFu0ll)
//============================================================================


struct  BFu9s_Vp_BFu0s  {
  unsigned short v1:9;
  void *v2;
  unsigned short  :0;
};
//SIG(1 BFu9s_Vp_BFu0s) C1{ Fs:9 Fp Fs:0}



static void Test_BFu9s_Vp_BFu0s()
{
  {
    init_simple_test("BFu9s_Vp_BFu0s");
    static STRUCT_IF_C BFu9s_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu9s_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu9s_Vp_BFu0s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFu9s_Vp_BFu0s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_ull(1LL<<8), "BFu9s_Vp_BFu0s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu9s_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu9s_Vp_BFu0s, BFu9s_Vp_BFu0s)
//============================================================================


struct  C_BFu0c  {
  char v1;
  unsigned char  :0;
};
//SIG(1 C_BFu0c) C1{ Fc Fc:0}



static void Test_C_BFu0c()
{
  {
    init_simple_test("C_BFu0c");
    static STRUCT_IF_C C_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c, C_BFu0c)
//============================================================================


struct  C_BFu0c_BFu0c  {
  char v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 C_BFu0c_BFu0c) C1{ Fc Fc:0 Fc:0}



static void Test_C_BFu0c_BFu0c()
{
  {
    init_simple_test("C_BFu0c_BFu0c");
    static STRUCT_IF_C C_BFu0c_BFu0c lv;
    check2(sizeof(lv), 1, "sizeof(C_BFu0c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu0c, C_BFu0c_BFu0c)
//============================================================================


struct  C_BFu0c_BFu0i  {
  char v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 C_BFu0c_BFu0i) C1{ Fc Fc:0 Fi:0}



static void Test_C_BFu0c_BFu0i()
{
  {
    init_simple_test("C_BFu0c_BFu0i");
    static STRUCT_IF_C C_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu0i, C_BFu0c_BFu0i)
//============================================================================


struct  C_BFu0c_BFu0ll  {
  char v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 C_BFu0c_BFu0ll) C1{ Fc Fc:0 FL:0}



static void Test_C_BFu0c_BFu0ll()
{
  {
    init_simple_test("C_BFu0c_BFu0ll");
    static STRUCT_IF_C C_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu0ll, C_BFu0c_BFu0ll)
//============================================================================


struct  C_BFu0c_BFu0s  {
  char v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 C_BFu0c_BFu0s) C1{ Fc Fc:0 Fs:0}



static void Test_C_BFu0c_BFu0s()
{
  {
    init_simple_test("C_BFu0c_BFu0s");
    static STRUCT_IF_C C_BFu0c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu0s, C_BFu0c_BFu0s)
//============================================================================


struct  C_BFu0c_BFu15i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 C_BFu0c_BFu15i) C1{ Fc Fc:0 Fi:15}



static void Test_C_BFu0c_BFu15i()
{
  {
    init_simple_test("C_BFu0c_BFu15i");
    static STRUCT_IF_C C_BFu0c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu15i, C_BFu0c_BFu15i)
//============================================================================


struct  C_BFu0c_BFu15ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 C_BFu0c_BFu15ll) C1{ Fc Fc:0 FL:15}



static void Test_C_BFu0c_BFu15ll()
{
  {
    init_simple_test("C_BFu0c_BFu15ll");
    static STRUCT_IF_C C_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu15ll, C_BFu0c_BFu15ll)
//============================================================================


struct  C_BFu0c_BFu15s  {
  char v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 C_BFu0c_BFu15s) C1{ Fc Fc:0 Fs:15}



static void Test_C_BFu0c_BFu15s()
{
  {
    init_simple_test("C_BFu0c_BFu15s");
    static STRUCT_IF_C C_BFu0c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu15s, C_BFu0c_BFu15s)
//============================================================================


struct  C_BFu0c_BFu16i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 C_BFu0c_BFu16i) C1{ Fc Fc:0 Fi:16}



static void Test_C_BFu0c_BFu16i()
{
  {
    init_simple_test("C_BFu0c_BFu16i");
    static STRUCT_IF_C C_BFu0c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu16i, C_BFu0c_BFu16i)
//============================================================================


struct  C_BFu0c_BFu16ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 C_BFu0c_BFu16ll) C1{ Fc Fc:0 FL:16}



static void Test_C_BFu0c_BFu16ll()
{
  {
    init_simple_test("C_BFu0c_BFu16ll");
    static STRUCT_IF_C C_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu16ll, C_BFu0c_BFu16ll)
//============================================================================


struct  C_BFu0c_BFu16s  {
  char v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 C_BFu0c_BFu16s) C1{ Fc Fc:0 Fs:16}



static void Test_C_BFu0c_BFu16s()
{
  {
    init_simple_test("C_BFu0c_BFu16s");
    static STRUCT_IF_C C_BFu0c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu16s, C_BFu0c_BFu16s)
//============================================================================


struct  C_BFu0c_BFu17i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 C_BFu0c_BFu17i) C1{ Fc Fc:0 Fi:17}



static void Test_C_BFu0c_BFu17i()
{
  {
    init_simple_test("C_BFu0c_BFu17i");
    static STRUCT_IF_C C_BFu0c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu17i, C_BFu0c_BFu17i)
//============================================================================


struct  C_BFu0c_BFu17ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 C_BFu0c_BFu17ll) C1{ Fc Fc:0 FL:17}



static void Test_C_BFu0c_BFu17ll()
{
  {
    init_simple_test("C_BFu0c_BFu17ll");
    static STRUCT_IF_C C_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu17ll, C_BFu0c_BFu17ll)
//============================================================================


struct  C_BFu0c_BFu1c  {
  char v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 C_BFu0c_BFu1c) C1{ Fc Fc:0 Fc:1}



static void Test_C_BFu0c_BFu1c()
{
  {
    init_simple_test("C_BFu0c_BFu1c");
    static STRUCT_IF_C C_BFu0c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu1c, C_BFu0c_BFu1c)
//============================================================================


struct  C_BFu0c_BFu1i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 C_BFu0c_BFu1i) C1{ Fc Fc:0 Fi:1}



static void Test_C_BFu0c_BFu1i()
{
  {
    init_simple_test("C_BFu0c_BFu1i");
    static STRUCT_IF_C C_BFu0c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu1i, C_BFu0c_BFu1i)
//============================================================================


struct  C_BFu0c_BFu1ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 C_BFu0c_BFu1ll) C1{ Fc Fc:0 FL:1}



static void Test_C_BFu0c_BFu1ll()
{
  {
    init_simple_test("C_BFu0c_BFu1ll");
    static STRUCT_IF_C C_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu1ll, C_BFu0c_BFu1ll)
//============================================================================


struct  C_BFu0c_BFu1s  {
  char v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 C_BFu0c_BFu1s) C1{ Fc Fc:0 Fs:1}



static void Test_C_BFu0c_BFu1s()
{
  {
    init_simple_test("C_BFu0c_BFu1s");
    static STRUCT_IF_C C_BFu0c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu1s, C_BFu0c_BFu1s)
//============================================================================


struct  C_BFu0c_BFu31i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 C_BFu0c_BFu31i) C1{ Fc Fc:0 Fi:31}



static void Test_C_BFu0c_BFu31i()
{
  {
    init_simple_test("C_BFu0c_BFu31i");
    static STRUCT_IF_C C_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu31i, C_BFu0c_BFu31i)
//============================================================================


struct  C_BFu0c_BFu31ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 C_BFu0c_BFu31ll) C1{ Fc Fc:0 FL:31}



static void Test_C_BFu0c_BFu31ll()
{
  {
    init_simple_test("C_BFu0c_BFu31ll");
    static STRUCT_IF_C C_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu31ll, C_BFu0c_BFu31ll)
//============================================================================


struct  C_BFu0c_BFu32i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 C_BFu0c_BFu32i) C1{ Fc Fc:0 Fi:32}



static void Test_C_BFu0c_BFu32i()
{
  {
    init_simple_test("C_BFu0c_BFu32i");
    static STRUCT_IF_C C_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu32i, C_BFu0c_BFu32i)
//============================================================================


struct  C_BFu0c_BFu32ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 C_BFu0c_BFu32ll) C1{ Fc Fc:0 FL:32}



static void Test_C_BFu0c_BFu32ll()
{
  {
    init_simple_test("C_BFu0c_BFu32ll");
    static STRUCT_IF_C C_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu32ll, C_BFu0c_BFu32ll)
//============================================================================


struct  C_BFu0c_BFu33  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 C_BFu0c_BFu33) C1{ Fc Fc:0 FL:33}



static void Test_C_BFu0c_BFu33()
{
  {
    init_simple_test("C_BFu0c_BFu33");
    static STRUCT_IF_C C_BFu0c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu33, C_BFu0c_BFu33)
//============================================================================


struct  C_BFu0c_BFu7c  {
  char v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 C_BFu0c_BFu7c) C1{ Fc Fc:0 Fc:7}



static void Test_C_BFu0c_BFu7c()
{
  {
    init_simple_test("C_BFu0c_BFu7c");
    static STRUCT_IF_C C_BFu0c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu7c, C_BFu0c_BFu7c)
//============================================================================


struct  C_BFu0c_BFu7i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 C_BFu0c_BFu7i) C1{ Fc Fc:0 Fi:7}



static void Test_C_BFu0c_BFu7i()
{
  {
    init_simple_test("C_BFu0c_BFu7i");
    static STRUCT_IF_C C_BFu0c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu7i, C_BFu0c_BFu7i)
//============================================================================


struct  C_BFu0c_BFu7ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 C_BFu0c_BFu7ll) C1{ Fc Fc:0 FL:7}



static void Test_C_BFu0c_BFu7ll()
{
  {
    init_simple_test("C_BFu0c_BFu7ll");
    static STRUCT_IF_C C_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu7ll, C_BFu0c_BFu7ll)
//============================================================================


struct  C_BFu0c_BFu7s  {
  char v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 C_BFu0c_BFu7s) C1{ Fc Fc:0 Fs:7}



static void Test_C_BFu0c_BFu7s()
{
  {
    init_simple_test("C_BFu0c_BFu7s");
    static STRUCT_IF_C C_BFu0c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu7s, C_BFu0c_BFu7s)
//============================================================================


struct  C_BFu0c_BFu8c  {
  char v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 C_BFu0c_BFu8c) C1{ Fc Fc:0 Fc:8}



static void Test_C_BFu0c_BFu8c()
{
  {
    init_simple_test("C_BFu0c_BFu8c");
    static STRUCT_IF_C C_BFu0c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu8c, C_BFu0c_BFu8c)
//============================================================================


struct  C_BFu0c_BFu8i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 C_BFu0c_BFu8i) C1{ Fc Fc:0 Fi:8}



static void Test_C_BFu0c_BFu8i()
{
  {
    init_simple_test("C_BFu0c_BFu8i");
    static STRUCT_IF_C C_BFu0c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu8i, C_BFu0c_BFu8i)
//============================================================================


struct  C_BFu0c_BFu8ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 C_BFu0c_BFu8ll) C1{ Fc Fc:0 FL:8}



static void Test_C_BFu0c_BFu8ll()
{
  {
    init_simple_test("C_BFu0c_BFu8ll");
    static STRUCT_IF_C C_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu8ll, C_BFu0c_BFu8ll)
//============================================================================


struct  C_BFu0c_BFu8s  {
  char v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 C_BFu0c_BFu8s) C1{ Fc Fc:0 Fs:8}



static void Test_C_BFu0c_BFu8s()
{
  {
    init_simple_test("C_BFu0c_BFu8s");
    static STRUCT_IF_C C_BFu0c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu8s, C_BFu0c_BFu8s)
//============================================================================


struct  C_BFu0c_BFu9i  {
  char v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 C_BFu0c_BFu9i) C1{ Fc Fc:0 Fi:9}



static void Test_C_BFu0c_BFu9i()
{
  {
    init_simple_test("C_BFu0c_BFu9i");
    static STRUCT_IF_C C_BFu0c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu9i, C_BFu0c_BFu9i)
//============================================================================


struct  C_BFu0c_BFu9ll  {
  char v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 C_BFu0c_BFu9ll) C1{ Fc Fc:0 FL:9}



static void Test_C_BFu0c_BFu9ll()
{
  {
    init_simple_test("C_BFu0c_BFu9ll");
    static STRUCT_IF_C C_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu9ll, C_BFu0c_BFu9ll)
//============================================================================


struct  C_BFu0c_BFu9s  {
  char v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 C_BFu0c_BFu9s) C1{ Fc Fc:0 Fs:9}



static void Test_C_BFu0c_BFu9s()
{
  {
    init_simple_test("C_BFu0c_BFu9s");
    static STRUCT_IF_C C_BFu0c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_BFu9s, C_BFu0c_BFu9s)
//============================================================================


struct  C_BFu0c_C  {
  char v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 C_BFu0c_C) C1{ Fc Fc:0 Fc}



static void Test_C_BFu0c_C()
{
  {
    init_simple_test("C_BFu0c_C");
    static STRUCT_IF_C C_BFu0c_C lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_C)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c_C)");
    check_field_offset(lv, v1, 0, "C_BFu0c_C.v1");
    check_field_offset(lv, v2, 1, "C_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_C, C_BFu0c_C)
//============================================================================


struct  C_BFu0c_D  {
  char v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 C_BFu0c_D) C1{ Fc Fc:0 FL}



static void Test_C_BFu0c_D()
{
  {
    init_simple_test("C_BFu0c_D");
    static STRUCT_IF_C C_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_D)");
    check_field_offset(lv, v1, 0, "C_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_D, C_BFu0c_D)
//============================================================================


struct  C_BFu0c_F  {
  char v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 C_BFu0c_F) C1{ Fc Fc:0 Fi}



static void Test_C_BFu0c_F()
{
  {
    init_simple_test("C_BFu0c_F");
    static STRUCT_IF_C C_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_F)");
    check_field_offset(lv, v1, 0, "C_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "C_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_F, C_BFu0c_F)
//============================================================================


struct  C_BFu0c_I  {
  char v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 C_BFu0c_I) C1{ Fc Fc:0 Fi}



static void Test_C_BFu0c_I()
{
  {
    init_simple_test("C_BFu0c_I");
    static STRUCT_IF_C C_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_I)");
    check_field_offset(lv, v1, 0, "C_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "C_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_I, C_BFu0c_I)
//============================================================================


struct  C_BFu0c_Ip  {
  char v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 C_BFu0c_Ip) C1{ Fc Fc:0 Fp}



static void Test_C_BFu0c_Ip()
{
  {
    init_simple_test("C_BFu0c_Ip");
    static STRUCT_IF_C C_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_Ip, C_BFu0c_Ip)
//============================================================================


struct  C_BFu0c_L  {
  char v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 C_BFu0c_L) C1{ Fc Fc:0 FL}



static void Test_C_BFu0c_L()
{
  {
    init_simple_test("C_BFu0c_L");
    static STRUCT_IF_C C_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_L)");
    check_field_offset(lv, v1, 0, "C_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_L, C_BFu0c_L)
//============================================================================


struct  C_BFu0c_S  {
  char v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 C_BFu0c_S) C1{ Fc Fc:0 Fs}



static void Test_C_BFu0c_S()
{
  {
    init_simple_test("C_BFu0c_S");
    static STRUCT_IF_C C_BFu0c_S lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_S)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_S)");
    check_field_offset(lv, v1, 0, "C_BFu0c_S.v1");
    check_field_offset(lv, v2, 2, "C_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_S, C_BFu0c_S)
//============================================================================


struct  C_BFu0c_Uc  {
  char v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 C_BFu0c_Uc) C1{ Fc Fc:0 Fc}



static void Test_C_BFu0c_Uc()
{
  {
    init_simple_test("C_BFu0c_Uc");
    static STRUCT_IF_C C_BFu0c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 1, "C_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_Uc, C_BFu0c_Uc)
//============================================================================


struct  C_BFu0c_Ui  {
  char v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 C_BFu0c_Ui) C1{ Fc Fc:0 Fi}



static void Test_C_BFu0c_Ui()
{
  {
    init_simple_test("C_BFu0c_Ui");
    static STRUCT_IF_C C_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "C_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_Ui, C_BFu0c_Ui)
//============================================================================


struct  C_BFu0c_Ul  {
  char v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 C_BFu0c_Ul) C1{ Fc Fc:0 FL}



static void Test_C_BFu0c_Ul()
{
  {
    init_simple_test("C_BFu0c_Ul");
    static STRUCT_IF_C C_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_Ul, C_BFu0c_Ul)
//============================================================================


struct  C_BFu0c_Us  {
  char v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 C_BFu0c_Us) C1{ Fc Fc:0 Fs}



static void Test_C_BFu0c_Us()
{
  {
    init_simple_test("C_BFu0c_Us");
    static STRUCT_IF_C C_BFu0c_Us lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "C_BFu0c_Us.v1");
    check_field_offset(lv, v2, 2, "C_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_Us, C_BFu0c_Us)
//============================================================================


struct  C_BFu0c_Vp  {
  char v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 C_BFu0c_Vp) C1{ Fc Fc:0 Fp}



static void Test_C_BFu0c_Vp()
{
  {
    init_simple_test("C_BFu0c_Vp");
    static STRUCT_IF_C C_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0c_Vp, C_BFu0c_Vp)
//============================================================================


struct  C_BFu0i  {
  char v1;
  unsigned int  :0;
};
//SIG(1 C_BFu0i) C1{ Fc Fi:0}



static void Test_C_BFu0i()
{
  {
    init_simple_test("C_BFu0i");
    static STRUCT_IF_C C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i, C_BFu0i)
//============================================================================


struct  C_BFu0i_BFu0c  {
  char v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 C_BFu0i_BFu0c) C1{ Fc Fi:0 Fc:0}



static void Test_C_BFu0i_BFu0c()
{
  {
    init_simple_test("C_BFu0i_BFu0c");
    static STRUCT_IF_C C_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu0c, C_BFu0i_BFu0c)
//============================================================================


struct  C_BFu0i_BFu0i  {
  char v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 C_BFu0i_BFu0i) C1{ Fc Fi:0 Fi:0}



static void Test_C_BFu0i_BFu0i()
{
  {
    init_simple_test("C_BFu0i_BFu0i");
    static STRUCT_IF_C C_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu0i, C_BFu0i_BFu0i)
//============================================================================


struct  C_BFu0i_BFu0ll  {
  char v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 C_BFu0i_BFu0ll) C1{ Fc Fi:0 FL:0}



static void Test_C_BFu0i_BFu0ll()
{
  {
    init_simple_test("C_BFu0i_BFu0ll");
    static STRUCT_IF_C C_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu0ll, C_BFu0i_BFu0ll)
//============================================================================


struct  C_BFu0i_BFu0s  {
  char v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 C_BFu0i_BFu0s) C1{ Fc Fi:0 Fs:0}



static void Test_C_BFu0i_BFu0s()
{
  {
    init_simple_test("C_BFu0i_BFu0s");
    static STRUCT_IF_C C_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu0s, C_BFu0i_BFu0s)
//============================================================================


struct  C_BFu0i_BFu15i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 C_BFu0i_BFu15i) C1{ Fc Fi:0 Fi:15}



static void Test_C_BFu0i_BFu15i()
{
  {
    init_simple_test("C_BFu0i_BFu15i");
    static STRUCT_IF_C C_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "C_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "C_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu15i, C_BFu0i_BFu15i)
//============================================================================


struct  C_BFu0i_BFu15ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 C_BFu0i_BFu15ll) C1{ Fc Fi:0 FL:15}



static void Test_C_BFu0i_BFu15ll()
{
  {
    init_simple_test("C_BFu0i_BFu15ll");
    static STRUCT_IF_C C_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "C_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "C_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu15ll, C_BFu0i_BFu15ll)
//============================================================================


struct  C_BFu0i_BFu15s  {
  char v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 C_BFu0i_BFu15s) C1{ Fc Fi:0 Fs:15}



static void Test_C_BFu0i_BFu15s()
{
  {
    init_simple_test("C_BFu0i_BFu15s");
    static STRUCT_IF_C C_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "C_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "C_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu15s, C_BFu0i_BFu15s)
//============================================================================


struct  C_BFu0i_BFu16i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 C_BFu0i_BFu16i) C1{ Fc Fi:0 Fi:16}



static void Test_C_BFu0i_BFu16i()
{
  {
    init_simple_test("C_BFu0i_BFu16i");
    static STRUCT_IF_C C_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "C_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "C_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu16i, C_BFu0i_BFu16i)
//============================================================================


struct  C_BFu0i_BFu16ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 C_BFu0i_BFu16ll) C1{ Fc Fi:0 FL:16}



static void Test_C_BFu0i_BFu16ll()
{
  {
    init_simple_test("C_BFu0i_BFu16ll");
    static STRUCT_IF_C C_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "C_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "C_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu16ll, C_BFu0i_BFu16ll)
//============================================================================


struct  C_BFu0i_BFu16s  {
  char v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 C_BFu0i_BFu16s) C1{ Fc Fi:0 Fs:16}



static void Test_C_BFu0i_BFu16s()
{
  {
    init_simple_test("C_BFu0i_BFu16s");
    static STRUCT_IF_C C_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "C_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "C_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu16s, C_BFu0i_BFu16s)
//============================================================================


struct  C_BFu0i_BFu17i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 C_BFu0i_BFu17i) C1{ Fc Fi:0 Fi:17}



static void Test_C_BFu0i_BFu17i()
{
  {
    init_simple_test("C_BFu0i_BFu17i");
    static STRUCT_IF_C C_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "C_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "C_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu17i, C_BFu0i_BFu17i)
//============================================================================


struct  C_BFu0i_BFu17ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 C_BFu0i_BFu17ll) C1{ Fc Fi:0 FL:17}



static void Test_C_BFu0i_BFu17ll()
{
  {
    init_simple_test("C_BFu0i_BFu17ll");
    static STRUCT_IF_C C_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "C_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "C_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu17ll, C_BFu0i_BFu17ll)
//============================================================================


struct  C_BFu0i_BFu1c  {
  char v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 C_BFu0i_BFu1c) C1{ Fc Fi:0 Fc:1}



static void Test_C_BFu0i_BFu1c()
{
  {
    init_simple_test("C_BFu0i_BFu1c");
    static STRUCT_IF_C C_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(C_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "C_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu1c, C_BFu0i_BFu1c)
//============================================================================


struct  C_BFu0i_BFu1i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 C_BFu0i_BFu1i) C1{ Fc Fi:0 Fi:1}



static void Test_C_BFu0i_BFu1i()
{
  {
    init_simple_test("C_BFu0i_BFu1i");
    static STRUCT_IF_C C_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "C_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu1i, C_BFu0i_BFu1i)
//============================================================================


struct  C_BFu0i_BFu1ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 C_BFu0i_BFu1ll) C1{ Fc Fi:0 FL:1}



static void Test_C_BFu0i_BFu1ll()
{
  {
    init_simple_test("C_BFu0i_BFu1ll");
    static STRUCT_IF_C C_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "C_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu1ll, C_BFu0i_BFu1ll)
//============================================================================


struct  C_BFu0i_BFu1s  {
  char v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 C_BFu0i_BFu1s) C1{ Fc Fi:0 Fs:1}



static void Test_C_BFu0i_BFu1s()
{
  {
    init_simple_test("C_BFu0i_BFu1s");
    static STRUCT_IF_C C_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "C_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu1s, C_BFu0i_BFu1s)
//============================================================================


struct  C_BFu0i_BFu31i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 C_BFu0i_BFu31i) C1{ Fc Fi:0 Fi:31}



static void Test_C_BFu0i_BFu31i()
{
  {
    init_simple_test("C_BFu0i_BFu31i");
    static STRUCT_IF_C C_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu31i, C_BFu0i_BFu31i)
//============================================================================


struct  C_BFu0i_BFu31ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 C_BFu0i_BFu31ll) C1{ Fc Fi:0 FL:31}



static void Test_C_BFu0i_BFu31ll()
{
  {
    init_simple_test("C_BFu0i_BFu31ll");
    static STRUCT_IF_C C_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu31ll, C_BFu0i_BFu31ll)
//============================================================================


struct  C_BFu0i_BFu32i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 C_BFu0i_BFu32i) C1{ Fc Fi:0 Fi:32}



static void Test_C_BFu0i_BFu32i()
{
  {
    init_simple_test("C_BFu0i_BFu32i");
    static STRUCT_IF_C C_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu32i, C_BFu0i_BFu32i)
//============================================================================


struct  C_BFu0i_BFu32ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 C_BFu0i_BFu32ll) C1{ Fc Fi:0 FL:32}



static void Test_C_BFu0i_BFu32ll()
{
  {
    init_simple_test("C_BFu0i_BFu32ll");
    static STRUCT_IF_C C_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu32ll, C_BFu0i_BFu32ll)
//============================================================================


struct  C_BFu0i_BFu33  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 C_BFu0i_BFu33) C1{ Fc Fi:0 FL:33}



static void Test_C_BFu0i_BFu33()
{
  {
    init_simple_test("C_BFu0i_BFu33");
    static STRUCT_IF_C C_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "C_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "C_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu33, C_BFu0i_BFu33)
//============================================================================


struct  C_BFu0i_BFu7c  {
  char v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 C_BFu0i_BFu7c) C1{ Fc Fi:0 Fc:7}



static void Test_C_BFu0i_BFu7c()
{
  {
    init_simple_test("C_BFu0i_BFu7c");
    static STRUCT_IF_C C_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(C_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "C_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "C_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu7c, C_BFu0i_BFu7c)
//============================================================================


struct  C_BFu0i_BFu7i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 C_BFu0i_BFu7i) C1{ Fc Fi:0 Fi:7}



static void Test_C_BFu0i_BFu7i()
{
  {
    init_simple_test("C_BFu0i_BFu7i");
    static STRUCT_IF_C C_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "C_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "C_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu7i, C_BFu0i_BFu7i)
//============================================================================


struct  C_BFu0i_BFu7ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 C_BFu0i_BFu7ll) C1{ Fc Fi:0 FL:7}



static void Test_C_BFu0i_BFu7ll()
{
  {
    init_simple_test("C_BFu0i_BFu7ll");
    static STRUCT_IF_C C_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "C_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "C_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu7ll, C_BFu0i_BFu7ll)
//============================================================================


struct  C_BFu0i_BFu7s  {
  char v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 C_BFu0i_BFu7s) C1{ Fc Fi:0 Fs:7}



static void Test_C_BFu0i_BFu7s()
{
  {
    init_simple_test("C_BFu0i_BFu7s");
    static STRUCT_IF_C C_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "C_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "C_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu7s, C_BFu0i_BFu7s)
//============================================================================


struct  C_BFu0i_BFu8c  {
  char v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 C_BFu0i_BFu8c) C1{ Fc Fi:0 Fc:8}



static void Test_C_BFu0i_BFu8c()
{
  {
    init_simple_test("C_BFu0i_BFu8c");
    static STRUCT_IF_C C_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(C_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "C_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "C_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu8c, C_BFu0i_BFu8c)
//============================================================================


struct  C_BFu0i_BFu8i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 C_BFu0i_BFu8i) C1{ Fc Fi:0 Fi:8}



static void Test_C_BFu0i_BFu8i()
{
  {
    init_simple_test("C_BFu0i_BFu8i");
    static STRUCT_IF_C C_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "C_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "C_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu8i, C_BFu0i_BFu8i)
//============================================================================


struct  C_BFu0i_BFu8ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 C_BFu0i_BFu8ll) C1{ Fc Fi:0 FL:8}



static void Test_C_BFu0i_BFu8ll()
{
  {
    init_simple_test("C_BFu0i_BFu8ll");
    static STRUCT_IF_C C_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "C_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "C_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu8ll, C_BFu0i_BFu8ll)
//============================================================================


struct  C_BFu0i_BFu8s  {
  char v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 C_BFu0i_BFu8s) C1{ Fc Fi:0 Fs:8}



static void Test_C_BFu0i_BFu8s()
{
  {
    init_simple_test("C_BFu0i_BFu8s");
    static STRUCT_IF_C C_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "C_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "C_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu8s, C_BFu0i_BFu8s)
//============================================================================


struct  C_BFu0i_BFu9i  {
  char v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 C_BFu0i_BFu9i) C1{ Fc Fi:0 Fi:9}



static void Test_C_BFu0i_BFu9i()
{
  {
    init_simple_test("C_BFu0i_BFu9i");
    static STRUCT_IF_C C_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "C_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "C_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu9i, C_BFu0i_BFu9i)
//============================================================================


struct  C_BFu0i_BFu9ll  {
  char v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 C_BFu0i_BFu9ll) C1{ Fc Fi:0 FL:9}



static void Test_C_BFu0i_BFu9ll()
{
  {
    init_simple_test("C_BFu0i_BFu9ll");
    static STRUCT_IF_C C_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "C_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "C_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu9ll, C_BFu0i_BFu9ll)
//============================================================================


struct  C_BFu0i_BFu9s  {
  char v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 C_BFu0i_BFu9s) C1{ Fc Fi:0 Fs:9}



static void Test_C_BFu0i_BFu9s()
{
  {
    init_simple_test("C_BFu0i_BFu9s");
    static STRUCT_IF_C C_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "C_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "C_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_BFu9s, C_BFu0i_BFu9s)
//============================================================================


struct  C_BFu0i_C  {
  char v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 C_BFu0i_C) C1{ Fc Fi:0 Fc}



static void Test_C_BFu0i_C()
{
  {
    init_simple_test("C_BFu0i_C");
    static STRUCT_IF_C C_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(C_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_C)");
    check_field_offset(lv, v1, 0, "C_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_C, C_BFu0i_C)
//============================================================================


struct  C_BFu0i_D  {
  char v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 C_BFu0i_D) C1{ Fc Fi:0 FL}



static void Test_C_BFu0i_D()
{
  {
    init_simple_test("C_BFu0i_D");
    static STRUCT_IF_C C_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_D)");
    check_field_offset(lv, v1, 0, "C_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_D, C_BFu0i_D)
//============================================================================


struct  C_BFu0i_F  {
  char v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 C_BFu0i_F) C1{ Fc Fi:0 Fi}



static void Test_C_BFu0i_F()
{
  {
    init_simple_test("C_BFu0i_F");
    static STRUCT_IF_C C_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_F)");
    check_field_offset(lv, v1, 0, "C_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_F, C_BFu0i_F)
//============================================================================


struct  C_BFu0i_I  {
  char v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 C_BFu0i_I) C1{ Fc Fi:0 Fi}



static void Test_C_BFu0i_I()
{
  {
    init_simple_test("C_BFu0i_I");
    static STRUCT_IF_C C_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_I)");
    check_field_offset(lv, v1, 0, "C_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_I, C_BFu0i_I)
//============================================================================


struct  C_BFu0i_Ip  {
  char v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 C_BFu0i_Ip) C1{ Fc Fi:0 Fp}



static void Test_C_BFu0i_Ip()
{
  {
    init_simple_test("C_BFu0i_Ip");
    static STRUCT_IF_C C_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_Ip, C_BFu0i_Ip)
//============================================================================


struct  C_BFu0i_L  {
  char v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 C_BFu0i_L) C1{ Fc Fi:0 FL}



static void Test_C_BFu0i_L()
{
  {
    init_simple_test("C_BFu0i_L");
    static STRUCT_IF_C C_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_L)");
    check_field_offset(lv, v1, 0, "C_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_L, C_BFu0i_L)
//============================================================================


struct  C_BFu0i_S  {
  char v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 C_BFu0i_S) C1{ Fc Fi:0 Fs}



static void Test_C_BFu0i_S()
{
  {
    init_simple_test("C_BFu0i_S");
    static STRUCT_IF_C C_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_S)");
    check_field_offset(lv, v1, 0, "C_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_S, C_BFu0i_S)
//============================================================================


struct  C_BFu0i_Uc  {
  char v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 C_BFu0i_Uc) C1{ Fc Fi:0 Fc}



static void Test_C_BFu0i_Uc()
{
  {
    init_simple_test("C_BFu0i_Uc");
    static STRUCT_IF_C C_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(5,5), "sizeof(C_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_Uc, C_BFu0i_Uc)
//============================================================================


struct  C_BFu0i_Ui  {
  char v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 C_BFu0i_Ui) C1{ Fc Fi:0 Fi}



static void Test_C_BFu0i_Ui()
{
  {
    init_simple_test("C_BFu0i_Ui");
    static STRUCT_IF_C C_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_Ui, C_BFu0i_Ui)
//============================================================================


struct  C_BFu0i_Ul  {
  char v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 C_BFu0i_Ul) C1{ Fc Fi:0 FL}



static void Test_C_BFu0i_Ul()
{
  {
    init_simple_test("C_BFu0i_Ul");
    static STRUCT_IF_C C_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_Ul, C_BFu0i_Ul)
//============================================================================


struct  C_BFu0i_Us  {
  char v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 C_BFu0i_Us) C1{ Fc Fi:0 Fs}



static void Test_C_BFu0i_Us()
{
  {
    init_simple_test("C_BFu0i_Us");
    static STRUCT_IF_C C_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(6,6), "sizeof(C_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "C_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "C_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_Us, C_BFu0i_Us)
//============================================================================


struct  C_BFu0i_Vp  {
  char v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 C_BFu0i_Vp) C1{ Fc Fi:0 Fp}



static void Test_C_BFu0i_Vp()
{
  {
    init_simple_test("C_BFu0i_Vp");
    static STRUCT_IF_C C_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0i_Vp, C_BFu0i_Vp)
//============================================================================


struct  C_BFu0ll  {
  char v1;
  __tsu64  :0;
};
//SIG(1 C_BFu0ll) C1{ Fc FL:0}



static void Test_C_BFu0ll()
{
  {
    init_simple_test("C_BFu0ll");
    static STRUCT_IF_C C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll, C_BFu0ll)
//============================================================================


struct  C_BFu0ll_BFu0c  {
  char v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 C_BFu0ll_BFu0c) C1{ Fc FL:0 Fc:0}



static void Test_C_BFu0ll_BFu0c()
{
  {
    init_simple_test("C_BFu0ll_BFu0c");
    static STRUCT_IF_C C_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu0c, C_BFu0ll_BFu0c)
//============================================================================


struct  C_BFu0ll_BFu0i  {
  char v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 C_BFu0ll_BFu0i) C1{ Fc FL:0 Fi:0}



static void Test_C_BFu0ll_BFu0i()
{
  {
    init_simple_test("C_BFu0ll_BFu0i");
    static STRUCT_IF_C C_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu0i, C_BFu0ll_BFu0i)
//============================================================================


struct  C_BFu0ll_BFu0ll  {
  char v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 C_BFu0ll_BFu0ll) C1{ Fc FL:0 FL:0}



static void Test_C_BFu0ll_BFu0ll()
{
  {
    init_simple_test("C_BFu0ll_BFu0ll");
    static STRUCT_IF_C C_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu0ll, C_BFu0ll_BFu0ll)
//============================================================================


struct  C_BFu0ll_BFu0s  {
  char v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 C_BFu0ll_BFu0s) C1{ Fc FL:0 Fs:0}



static void Test_C_BFu0ll_BFu0s()
{
  {
    init_simple_test("C_BFu0ll_BFu0s");
    static STRUCT_IF_C C_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu0s, C_BFu0ll_BFu0s)
//============================================================================


struct  C_BFu0ll_BFu15i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 C_BFu0ll_BFu15i) C1{ Fc FL:0 Fi:15}



static void Test_C_BFu0ll_BFu15i()
{
  {
    init_simple_test("C_BFu0ll_BFu15i");
    static STRUCT_IF_C C_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "C_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "C_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu15i, C_BFu0ll_BFu15i)
//============================================================================


struct  C_BFu0ll_BFu15ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 C_BFu0ll_BFu15ll) C1{ Fc FL:0 FL:15}



static void Test_C_BFu0ll_BFu15ll()
{
  {
    init_simple_test("C_BFu0ll_BFu15ll");
    static STRUCT_IF_C C_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "C_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "C_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu15ll, C_BFu0ll_BFu15ll)
//============================================================================


struct  C_BFu0ll_BFu15s  {
  char v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 C_BFu0ll_BFu15s) C1{ Fc FL:0 Fs:15}



static void Test_C_BFu0ll_BFu15s()
{
  {
    init_simple_test("C_BFu0ll_BFu15s");
    static STRUCT_IF_C C_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "C_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "C_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu15s, C_BFu0ll_BFu15s)
//============================================================================


struct  C_BFu0ll_BFu16i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 C_BFu0ll_BFu16i) C1{ Fc FL:0 Fi:16}



static void Test_C_BFu0ll_BFu16i()
{
  {
    init_simple_test("C_BFu0ll_BFu16i");
    static STRUCT_IF_C C_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "C_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "C_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu16i, C_BFu0ll_BFu16i)
//============================================================================


struct  C_BFu0ll_BFu16ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 C_BFu0ll_BFu16ll) C1{ Fc FL:0 FL:16}



static void Test_C_BFu0ll_BFu16ll()
{
  {
    init_simple_test("C_BFu0ll_BFu16ll");
    static STRUCT_IF_C C_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "C_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "C_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu16ll, C_BFu0ll_BFu16ll)
//============================================================================


struct  C_BFu0ll_BFu16s  {
  char v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 C_BFu0ll_BFu16s) C1{ Fc FL:0 Fs:16}



static void Test_C_BFu0ll_BFu16s()
{
  {
    init_simple_test("C_BFu0ll_BFu16s");
    static STRUCT_IF_C C_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "C_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "C_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu16s, C_BFu0ll_BFu16s)
//============================================================================


struct  C_BFu0ll_BFu17i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 C_BFu0ll_BFu17i) C1{ Fc FL:0 Fi:17}



static void Test_C_BFu0ll_BFu17i()
{
  {
    init_simple_test("C_BFu0ll_BFu17i");
    static STRUCT_IF_C C_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "C_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "C_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu17i, C_BFu0ll_BFu17i)
//============================================================================


struct  C_BFu0ll_BFu17ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 C_BFu0ll_BFu17ll) C1{ Fc FL:0 FL:17}



static void Test_C_BFu0ll_BFu17ll()
{
  {
    init_simple_test("C_BFu0ll_BFu17ll");
    static STRUCT_IF_C C_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "C_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "C_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu17ll, C_BFu0ll_BFu17ll)
//============================================================================


struct  C_BFu0ll_BFu1c  {
  char v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 C_BFu0ll_BFu1c) C1{ Fc FL:0 Fc:1}



static void Test_C_BFu0ll_BFu1c()
{
  {
    init_simple_test("C_BFu0ll_BFu1c");
    static STRUCT_IF_C C_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(C_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "C_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu1c, C_BFu0ll_BFu1c)
//============================================================================


struct  C_BFu0ll_BFu1i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 C_BFu0ll_BFu1i) C1{ Fc FL:0 Fi:1}



static void Test_C_BFu0ll_BFu1i()
{
  {
    init_simple_test("C_BFu0ll_BFu1i");
    static STRUCT_IF_C C_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "C_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu1i, C_BFu0ll_BFu1i)
//============================================================================


struct  C_BFu0ll_BFu1ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 C_BFu0ll_BFu1ll) C1{ Fc FL:0 FL:1}



static void Test_C_BFu0ll_BFu1ll()
{
  {
    init_simple_test("C_BFu0ll_BFu1ll");
    static STRUCT_IF_C C_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "C_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu1ll, C_BFu0ll_BFu1ll)
//============================================================================


struct  C_BFu0ll_BFu1s  {
  char v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 C_BFu0ll_BFu1s) C1{ Fc FL:0 Fs:1}



static void Test_C_BFu0ll_BFu1s()
{
  {
    init_simple_test("C_BFu0ll_BFu1s");
    static STRUCT_IF_C C_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "C_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu1s, C_BFu0ll_BFu1s)
//============================================================================


struct  C_BFu0ll_BFu31i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 C_BFu0ll_BFu31i) C1{ Fc FL:0 Fi:31}



static void Test_C_BFu0ll_BFu31i()
{
  {
    init_simple_test("C_BFu0ll_BFu31i");
    static STRUCT_IF_C C_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "C_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "C_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu31i, C_BFu0ll_BFu31i)
//============================================================================


struct  C_BFu0ll_BFu31ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 C_BFu0ll_BFu31ll) C1{ Fc FL:0 FL:31}



static void Test_C_BFu0ll_BFu31ll()
{
  {
    init_simple_test("C_BFu0ll_BFu31ll");
    static STRUCT_IF_C C_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "C_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "C_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu31ll, C_BFu0ll_BFu31ll)
//============================================================================


struct  C_BFu0ll_BFu32i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 C_BFu0ll_BFu32i) C1{ Fc FL:0 Fi:32}



static void Test_C_BFu0ll_BFu32i()
{
  {
    init_simple_test("C_BFu0ll_BFu32i");
    static STRUCT_IF_C C_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "C_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "C_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu32i, C_BFu0ll_BFu32i)
//============================================================================


struct  C_BFu0ll_BFu32ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 C_BFu0ll_BFu32ll) C1{ Fc FL:0 FL:32}



static void Test_C_BFu0ll_BFu32ll()
{
  {
    init_simple_test("C_BFu0ll_BFu32ll");
    static STRUCT_IF_C C_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "C_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "C_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu32ll, C_BFu0ll_BFu32ll)
//============================================================================


struct  C_BFu0ll_BFu33  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 C_BFu0ll_BFu33) C1{ Fc FL:0 FL:33}



static void Test_C_BFu0ll_BFu33()
{
  {
    init_simple_test("C_BFu0ll_BFu33");
    static STRUCT_IF_C C_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "C_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "C_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu33, C_BFu0ll_BFu33)
//============================================================================


struct  C_BFu0ll_BFu7c  {
  char v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 C_BFu0ll_BFu7c) C1{ Fc FL:0 Fc:7}



static void Test_C_BFu0ll_BFu7c()
{
  {
    init_simple_test("C_BFu0ll_BFu7c");
    static STRUCT_IF_C C_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(C_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "C_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "C_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu7c, C_BFu0ll_BFu7c)
//============================================================================


struct  C_BFu0ll_BFu7i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 C_BFu0ll_BFu7i) C1{ Fc FL:0 Fi:7}



static void Test_C_BFu0ll_BFu7i()
{
  {
    init_simple_test("C_BFu0ll_BFu7i");
    static STRUCT_IF_C C_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "C_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "C_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu7i, C_BFu0ll_BFu7i)
//============================================================================


struct  C_BFu0ll_BFu7ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 C_BFu0ll_BFu7ll) C1{ Fc FL:0 FL:7}



static void Test_C_BFu0ll_BFu7ll()
{
  {
    init_simple_test("C_BFu0ll_BFu7ll");
    static STRUCT_IF_C C_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "C_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "C_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu7ll, C_BFu0ll_BFu7ll)
//============================================================================


struct  C_BFu0ll_BFu7s  {
  char v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 C_BFu0ll_BFu7s) C1{ Fc FL:0 Fs:7}



static void Test_C_BFu0ll_BFu7s()
{
  {
    init_simple_test("C_BFu0ll_BFu7s");
    static STRUCT_IF_C C_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "C_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "C_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu7s, C_BFu0ll_BFu7s)
//============================================================================


struct  C_BFu0ll_BFu8c  {
  char v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 C_BFu0ll_BFu8c) C1{ Fc FL:0 Fc:8}



static void Test_C_BFu0ll_BFu8c()
{
  {
    init_simple_test("C_BFu0ll_BFu8c");
    static STRUCT_IF_C C_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(C_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "C_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "C_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu8c, C_BFu0ll_BFu8c)
//============================================================================


struct  C_BFu0ll_BFu8i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 C_BFu0ll_BFu8i) C1{ Fc FL:0 Fi:8}



static void Test_C_BFu0ll_BFu8i()
{
  {
    init_simple_test("C_BFu0ll_BFu8i");
    static STRUCT_IF_C C_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "C_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "C_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu8i, C_BFu0ll_BFu8i)
//============================================================================


struct  C_BFu0ll_BFu8ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 C_BFu0ll_BFu8ll) C1{ Fc FL:0 FL:8}



static void Test_C_BFu0ll_BFu8ll()
{
  {
    init_simple_test("C_BFu0ll_BFu8ll");
    static STRUCT_IF_C C_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "C_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "C_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu8ll, C_BFu0ll_BFu8ll)
//============================================================================


struct  C_BFu0ll_BFu8s  {
  char v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 C_BFu0ll_BFu8s) C1{ Fc FL:0 Fs:8}



static void Test_C_BFu0ll_BFu8s()
{
  {
    init_simple_test("C_BFu0ll_BFu8s");
    static STRUCT_IF_C C_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "C_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "C_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu8s, C_BFu0ll_BFu8s)
//============================================================================


struct  C_BFu0ll_BFu9i  {
  char v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 C_BFu0ll_BFu9i) C1{ Fc FL:0 Fi:9}



static void Test_C_BFu0ll_BFu9i()
{
  {
    init_simple_test("C_BFu0ll_BFu9i");
    static STRUCT_IF_C C_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "C_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "C_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu9i, C_BFu0ll_BFu9i)
//============================================================================


struct  C_BFu0ll_BFu9ll  {
  char v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 C_BFu0ll_BFu9ll) C1{ Fc FL:0 FL:9}



static void Test_C_BFu0ll_BFu9ll()
{
  {
    init_simple_test("C_BFu0ll_BFu9ll");
    static STRUCT_IF_C C_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "C_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "C_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu9ll, C_BFu0ll_BFu9ll)
//============================================================================


struct  C_BFu0ll_BFu9s  {
  char v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 C_BFu0ll_BFu9s) C1{ Fc FL:0 Fs:9}



static void Test_C_BFu0ll_BFu9s()
{
  {
    init_simple_test("C_BFu0ll_BFu9s");
    static STRUCT_IF_C C_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "C_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "C_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_BFu9s, C_BFu0ll_BFu9s)
//============================================================================


struct  C_BFu0ll_C  {
  char v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 C_BFu0ll_C) C1{ Fc FL:0 Fc}



static void Test_C_BFu0ll_C()
{
  {
    init_simple_test("C_BFu0ll_C");
    static STRUCT_IF_C C_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(C_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_C, C_BFu0ll_C)
//============================================================================


struct  C_BFu0ll_D  {
  char v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 C_BFu0ll_D) C1{ Fc FL:0 FL}



static void Test_C_BFu0ll_D()
{
  {
    init_simple_test("C_BFu0ll_D");
    static STRUCT_IF_C C_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_D, C_BFu0ll_D)
//============================================================================


struct  C_BFu0ll_F  {
  char v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 C_BFu0ll_F) C1{ Fc FL:0 Fi}



static void Test_C_BFu0ll_F()
{
  {
    init_simple_test("C_BFu0ll_F");
    static STRUCT_IF_C C_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_F, C_BFu0ll_F)
//============================================================================


struct  C_BFu0ll_I  {
  char v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 C_BFu0ll_I) C1{ Fc FL:0 Fi}



static void Test_C_BFu0ll_I()
{
  {
    init_simple_test("C_BFu0ll_I");
    static STRUCT_IF_C C_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_I, C_BFu0ll_I)
//============================================================================


struct  C_BFu0ll_Ip  {
  char v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 C_BFu0ll_Ip) C1{ Fc FL:0 Fp}



static void Test_C_BFu0ll_Ip()
{
  {
    init_simple_test("C_BFu0ll_Ip");
    static STRUCT_IF_C C_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_Ip, C_BFu0ll_Ip)
//============================================================================


struct  C_BFu0ll_L  {
  char v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 C_BFu0ll_L) C1{ Fc FL:0 FL}



static void Test_C_BFu0ll_L()
{
  {
    init_simple_test("C_BFu0ll_L");
    static STRUCT_IF_C C_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_L, C_BFu0ll_L)
//============================================================================


struct  C_BFu0ll_S  {
  char v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 C_BFu0ll_S) C1{ Fc FL:0 Fs}



static void Test_C_BFu0ll_S()
{
  {
    init_simple_test("C_BFu0ll_S");
    static STRUCT_IF_C C_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_S, C_BFu0ll_S)
//============================================================================


struct  C_BFu0ll_Uc  {
  char v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 C_BFu0ll_Uc) C1{ Fc FL:0 Fc}



static void Test_C_BFu0ll_Uc()
{
  {
    init_simple_test("C_BFu0ll_Uc");
    static STRUCT_IF_C C_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(9,5), "sizeof(C_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_Uc, C_BFu0ll_Uc)
//============================================================================


struct  C_BFu0ll_Ui  {
  char v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 C_BFu0ll_Ui) C1{ Fc FL:0 Fi}



static void Test_C_BFu0ll_Ui()
{
  {
    init_simple_test("C_BFu0ll_Ui");
    static STRUCT_IF_C C_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(C_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_Ui, C_BFu0ll_Ui)
//============================================================================


struct  C_BFu0ll_Ul  {
  char v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 C_BFu0ll_Ul) C1{ Fc FL:0 FL}



static void Test_C_BFu0ll_Ul()
{
  {
    init_simple_test("C_BFu0ll_Ul");
    static STRUCT_IF_C C_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_Ul, C_BFu0ll_Ul)
//============================================================================


struct  C_BFu0ll_Us  {
  char v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 C_BFu0ll_Us) C1{ Fc FL:0 Fs}



static void Test_C_BFu0ll_Us()
{
  {
    init_simple_test("C_BFu0ll_Us");
    static STRUCT_IF_C C_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(10,6), "sizeof(C_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_Us, C_BFu0ll_Us)
//============================================================================


struct  C_BFu0ll_Vp  {
  char v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 C_BFu0ll_Vp) C1{ Fc FL:0 Fp}



static void Test_C_BFu0ll_Vp()
{
  {
    init_simple_test("C_BFu0ll_Vp");
    static STRUCT_IF_C C_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0ll_Vp, C_BFu0ll_Vp)
//============================================================================


struct  C_BFu0s  {
  char v1;
  unsigned short  :0;
};
//SIG(1 C_BFu0s) C1{ Fc Fs:0}



static void Test_C_BFu0s()
{
  {
    init_simple_test("C_BFu0s");
    static STRUCT_IF_C C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s, C_BFu0s)
//============================================================================


struct  C_BFu0s_BFu0c  {
  char v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 C_BFu0s_BFu0c) C1{ Fc Fs:0 Fc:0}



static void Test_C_BFu0s_BFu0c()
{
  {
    init_simple_test("C_BFu0s_BFu0c");
    static STRUCT_IF_C C_BFu0s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu0c, C_BFu0s_BFu0c)
//============================================================================


struct  C_BFu0s_BFu0i  {
  char v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 C_BFu0s_BFu0i) C1{ Fc Fs:0 Fi:0}



static void Test_C_BFu0s_BFu0i()
{
  {
    init_simple_test("C_BFu0s_BFu0i");
    static STRUCT_IF_C C_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu0i, C_BFu0s_BFu0i)
//============================================================================


struct  C_BFu0s_BFu0ll  {
  char v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 C_BFu0s_BFu0ll) C1{ Fc Fs:0 FL:0}



static void Test_C_BFu0s_BFu0ll()
{
  {
    init_simple_test("C_BFu0s_BFu0ll");
    static STRUCT_IF_C C_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu0ll, C_BFu0s_BFu0ll)
//============================================================================


struct  C_BFu0s_BFu0s  {
  char v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 C_BFu0s_BFu0s) C1{ Fc Fs:0 Fs:0}



static void Test_C_BFu0s_BFu0s()
{
  {
    init_simple_test("C_BFu0s_BFu0s");
    static STRUCT_IF_C C_BFu0s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu0s, C_BFu0s_BFu0s)
//============================================================================


struct  C_BFu0s_BFu15i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 C_BFu0s_BFu15i) C1{ Fc Fs:0 Fi:15}



static void Test_C_BFu0s_BFu15i()
{
  {
    init_simple_test("C_BFu0s_BFu15i");
    static STRUCT_IF_C C_BFu0s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu15i, C_BFu0s_BFu15i)
//============================================================================


struct  C_BFu0s_BFu15ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 C_BFu0s_BFu15ll) C1{ Fc Fs:0 FL:15}



static void Test_C_BFu0s_BFu15ll()
{
  {
    init_simple_test("C_BFu0s_BFu15ll");
    static STRUCT_IF_C C_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu15ll, C_BFu0s_BFu15ll)
//============================================================================


struct  C_BFu0s_BFu15s  {
  char v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 C_BFu0s_BFu15s) C1{ Fc Fs:0 Fs:15}



static void Test_C_BFu0s_BFu15s()
{
  {
    init_simple_test("C_BFu0s_BFu15s");
    static STRUCT_IF_C C_BFu0s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu15s, C_BFu0s_BFu15s)
//============================================================================


struct  C_BFu0s_BFu16i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 C_BFu0s_BFu16i) C1{ Fc Fs:0 Fi:16}



static void Test_C_BFu0s_BFu16i()
{
  {
    init_simple_test("C_BFu0s_BFu16i");
    static STRUCT_IF_C C_BFu0s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu16i, C_BFu0s_BFu16i)
//============================================================================


struct  C_BFu0s_BFu16ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 C_BFu0s_BFu16ll) C1{ Fc Fs:0 FL:16}



static void Test_C_BFu0s_BFu16ll()
{
  {
    init_simple_test("C_BFu0s_BFu16ll");
    static STRUCT_IF_C C_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu16ll, C_BFu0s_BFu16ll)
//============================================================================


struct  C_BFu0s_BFu16s  {
  char v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 C_BFu0s_BFu16s) C1{ Fc Fs:0 Fs:16}



static void Test_C_BFu0s_BFu16s()
{
  {
    init_simple_test("C_BFu0s_BFu16s");
    static STRUCT_IF_C C_BFu0s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu16s, C_BFu0s_BFu16s)
//============================================================================


struct  C_BFu0s_BFu17i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 C_BFu0s_BFu17i) C1{ Fc Fs:0 Fi:17}



static void Test_C_BFu0s_BFu17i()
{
  {
    init_simple_test("C_BFu0s_BFu17i");
    static STRUCT_IF_C C_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "C_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "C_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu17i, C_BFu0s_BFu17i)
//============================================================================


struct  C_BFu0s_BFu17ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 C_BFu0s_BFu17ll) C1{ Fc Fs:0 FL:17}



static void Test_C_BFu0s_BFu17ll()
{
  {
    init_simple_test("C_BFu0s_BFu17ll");
    static STRUCT_IF_C C_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 17, 1, "C_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 17, hide_ull(1LL<<16), "C_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu17ll, C_BFu0s_BFu17ll)
//============================================================================


struct  C_BFu0s_BFu1c  {
  char v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 C_BFu0s_BFu1c) C1{ Fc Fs:0 Fc:1}



static void Test_C_BFu0s_BFu1c()
{
  {
    init_simple_test("C_BFu0s_BFu1c");
    static STRUCT_IF_C C_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(C_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "C_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu1c, C_BFu0s_BFu1c)
//============================================================================


struct  C_BFu0s_BFu1i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 C_BFu0s_BFu1i) C1{ Fc Fs:0 Fi:1}



static void Test_C_BFu0s_BFu1i()
{
  {
    init_simple_test("C_BFu0s_BFu1i");
    static STRUCT_IF_C C_BFu0s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "C_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu1i, C_BFu0s_BFu1i)
//============================================================================


struct  C_BFu0s_BFu1ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 C_BFu0s_BFu1ll) C1{ Fc Fs:0 FL:1}



static void Test_C_BFu0s_BFu1ll()
{
  {
    init_simple_test("C_BFu0s_BFu1ll");
    static STRUCT_IF_C C_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "C_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu1ll, C_BFu0s_BFu1ll)
//============================================================================


struct  C_BFu0s_BFu1s  {
  char v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 C_BFu0s_BFu1s) C1{ Fc Fs:0 Fs:1}



static void Test_C_BFu0s_BFu1s()
{
  {
    init_simple_test("C_BFu0s_BFu1s");
    static STRUCT_IF_C C_BFu0s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 2, 0, 1, 1, "C_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu1s, C_BFu0s_BFu1s)
//============================================================================


struct  C_BFu0s_BFu31i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 C_BFu0s_BFu31i) C1{ Fc Fs:0 Fi:31}



static void Test_C_BFu0s_BFu31i()
{
  {
    init_simple_test("C_BFu0s_BFu31i");
    static STRUCT_IF_C C_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu31i, C_BFu0s_BFu31i)
//============================================================================


struct  C_BFu0s_BFu31ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 C_BFu0s_BFu31ll) C1{ Fc Fs:0 FL:31}



static void Test_C_BFu0s_BFu31ll()
{
  {
    init_simple_test("C_BFu0s_BFu31ll");
    static STRUCT_IF_C C_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 31, 1, "C_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 31, hide_ull(1LL<<30), "C_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu31ll, C_BFu0s_BFu31ll)
//============================================================================


struct  C_BFu0s_BFu32i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 C_BFu0s_BFu32i) C1{ Fc Fs:0 Fi:32}



static void Test_C_BFu0s_BFu32i()
{
  {
    init_simple_test("C_BFu0s_BFu32i");
    static STRUCT_IF_C C_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu32i, C_BFu0s_BFu32i)
//============================================================================


struct  C_BFu0s_BFu32ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 C_BFu0s_BFu32ll) C1{ Fc Fs:0 FL:32}



static void Test_C_BFu0s_BFu32ll()
{
  {
    init_simple_test("C_BFu0s_BFu32ll");
    static STRUCT_IF_C C_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 32, 1, "C_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 32, hide_ull(1LL<<31), "C_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu32ll, C_BFu0s_BFu32ll)
//============================================================================


struct  C_BFu0s_BFu33  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 C_BFu0s_BFu33) C1{ Fc Fs:0 FL:33}



static void Test_C_BFu0s_BFu33()
{
  {
    init_simple_test("C_BFu0s_BFu33");
    static STRUCT_IF_C C_BFu0s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 2, 0, 33, 1, "C_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 33, hide_ull(1LL<<32), "C_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu33, C_BFu0s_BFu33)
//============================================================================


struct  C_BFu0s_BFu7c  {
  char v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 C_BFu0s_BFu7c) C1{ Fc Fs:0 Fc:7}



static void Test_C_BFu0s_BFu7c()
{
  {
    init_simple_test("C_BFu0s_BFu7c");
    static STRUCT_IF_C C_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(C_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "C_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "C_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu7c, C_BFu0s_BFu7c)
//============================================================================


struct  C_BFu0s_BFu7i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 C_BFu0s_BFu7i) C1{ Fc Fs:0 Fi:7}



static void Test_C_BFu0s_BFu7i()
{
  {
    init_simple_test("C_BFu0s_BFu7i");
    static STRUCT_IF_C C_BFu0s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "C_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "C_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu7i, C_BFu0s_BFu7i)
//============================================================================


struct  C_BFu0s_BFu7ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 C_BFu0s_BFu7ll) C1{ Fc Fs:0 FL:7}



static void Test_C_BFu0s_BFu7ll()
{
  {
    init_simple_test("C_BFu0s_BFu7ll");
    static STRUCT_IF_C C_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "C_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "C_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu7ll, C_BFu0s_BFu7ll)
//============================================================================


struct  C_BFu0s_BFu7s  {
  char v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 C_BFu0s_BFu7s) C1{ Fc Fs:0 Fs:7}



static void Test_C_BFu0s_BFu7s()
{
  {
    init_simple_test("C_BFu0s_BFu7s");
    static STRUCT_IF_C C_BFu0s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "C_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "C_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu7s, C_BFu0s_BFu7s)
//============================================================================


struct  C_BFu0s_BFu8c  {
  char v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 C_BFu0s_BFu8c) C1{ Fc Fs:0 Fc:8}



static void Test_C_BFu0s_BFu8c()
{
  {
    init_simple_test("C_BFu0s_BFu8c");
    static STRUCT_IF_C C_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(C_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "C_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "C_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu8c, C_BFu0s_BFu8c)
//============================================================================


struct  C_BFu0s_BFu8i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 C_BFu0s_BFu8i) C1{ Fc Fs:0 Fi:8}



static void Test_C_BFu0s_BFu8i()
{
  {
    init_simple_test("C_BFu0s_BFu8i");
    static STRUCT_IF_C C_BFu0s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "C_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "C_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu8i, C_BFu0s_BFu8i)
//============================================================================


struct  C_BFu0s_BFu8ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 C_BFu0s_BFu8ll) C1{ Fc Fs:0 FL:8}



static void Test_C_BFu0s_BFu8ll()
{
  {
    init_simple_test("C_BFu0s_BFu8ll");
    static STRUCT_IF_C C_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "C_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "C_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu8ll, C_BFu0s_BFu8ll)
//============================================================================


struct  C_BFu0s_BFu8s  {
  char v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 C_BFu0s_BFu8s) C1{ Fc Fs:0 Fs:8}



static void Test_C_BFu0s_BFu8s()
{
  {
    init_simple_test("C_BFu0s_BFu8s");
    static STRUCT_IF_C C_BFu0s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "C_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "C_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu8s, C_BFu0s_BFu8s)
//============================================================================


struct  C_BFu0s_BFu9i  {
  char v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 C_BFu0s_BFu9i) C1{ Fc Fs:0 Fi:9}



static void Test_C_BFu0s_BFu9i()
{
  {
    init_simple_test("C_BFu0s_BFu9i");
    static STRUCT_IF_C C_BFu0s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu9i, C_BFu0s_BFu9i)
//============================================================================


struct  C_BFu0s_BFu9ll  {
  char v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 C_BFu0s_BFu9ll) C1{ Fc Fs:0 FL:9}



static void Test_C_BFu0s_BFu9ll()
{
  {
    init_simple_test("C_BFu0s_BFu9ll");
    static STRUCT_IF_C C_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu9ll, C_BFu0s_BFu9ll)
//============================================================================


struct  C_BFu0s_BFu9s  {
  char v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 C_BFu0s_BFu9s) C1{ Fc Fs:0 Fs:9}



static void Test_C_BFu0s_BFu9s()
{
  {
    init_simple_test("C_BFu0s_BFu9s");
    static STRUCT_IF_C C_BFu0s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "C_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_BFu9s, C_BFu0s_BFu9s)
//============================================================================


struct  C_BFu0s_C  {
  char v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 C_BFu0s_C) C1{ Fc Fs:0 Fc}



static void Test_C_BFu0s_C()
{
  {
    init_simple_test("C_BFu0s_C");
    static STRUCT_IF_C C_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(C_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_C)");
    check_field_offset(lv, v1, 0, "C_BFu0s_C.v1");
    check_field_offset(lv, v2, 2, "C_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_C, C_BFu0s_C)
//============================================================================


struct  C_BFu0s_D  {
  char v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 C_BFu0s_D) C1{ Fc Fs:0 FL}



static void Test_C_BFu0s_D()
{
  {
    init_simple_test("C_BFu0s_D");
    static STRUCT_IF_C C_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_D)");
    check_field_offset(lv, v1, 0, "C_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_D, C_BFu0s_D)
//============================================================================


struct  C_BFu0s_F  {
  char v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 C_BFu0s_F) C1{ Fc Fs:0 Fi}



static void Test_C_BFu0s_F()
{
  {
    init_simple_test("C_BFu0s_F");
    static STRUCT_IF_C C_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_F)");
    check_field_offset(lv, v1, 0, "C_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "C_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_F, C_BFu0s_F)
//============================================================================


struct  C_BFu0s_I  {
  char v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 C_BFu0s_I) C1{ Fc Fs:0 Fi}



static void Test_C_BFu0s_I()
{
  {
    init_simple_test("C_BFu0s_I");
    static STRUCT_IF_C C_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_I)");
    check_field_offset(lv, v1, 0, "C_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "C_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_I, C_BFu0s_I)
//============================================================================


struct  C_BFu0s_Ip  {
  char v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 C_BFu0s_Ip) C1{ Fc Fs:0 Fp}



static void Test_C_BFu0s_Ip()
{
  {
    init_simple_test("C_BFu0s_Ip");
    static STRUCT_IF_C C_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "C_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_Ip, C_BFu0s_Ip)
//============================================================================


struct  C_BFu0s_L  {
  char v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 C_BFu0s_L) C1{ Fc Fs:0 FL}



static void Test_C_BFu0s_L()
{
  {
    init_simple_test("C_BFu0s_L");
    static STRUCT_IF_C C_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_L)");
    check_field_offset(lv, v1, 0, "C_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_L, C_BFu0s_L)
//============================================================================


struct  C_BFu0s_S  {
  char v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 C_BFu0s_S) C1{ Fc Fs:0 Fs}



static void Test_C_BFu0s_S()
{
  {
    init_simple_test("C_BFu0s_S");
    static STRUCT_IF_C C_BFu0s_S lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_S)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_S)");
    check_field_offset(lv, v1, 0, "C_BFu0s_S.v1");
    check_field_offset(lv, v2, 2, "C_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_S, C_BFu0s_S)
//============================================================================


struct  C_BFu0s_Uc  {
  char v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 C_BFu0s_Uc) C1{ Fc Fs:0 Fc}



static void Test_C_BFu0s_Uc()
{
  {
    init_simple_test("C_BFu0s_Uc");
    static STRUCT_IF_C C_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(3,3), "sizeof(C_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "C_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 2, "C_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_Uc, C_BFu0s_Uc)
//============================================================================


struct  C_BFu0s_Ui  {
  char v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 C_BFu0s_Ui) C1{ Fc Fs:0 Fi}



static void Test_C_BFu0s_Ui()
{
  {
    init_simple_test("C_BFu0s_Ui");
    static STRUCT_IF_C C_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "C_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "C_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_Ui, C_BFu0s_Ui)
//============================================================================


struct  C_BFu0s_Ul  {
  char v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 C_BFu0s_Ul) C1{ Fc Fs:0 FL}



static void Test_C_BFu0s_Ul()
{
  {
    init_simple_test("C_BFu0s_Ul");
    static STRUCT_IF_C C_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "C_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_Ul, C_BFu0s_Ul)
//============================================================================


struct  C_BFu0s_Us  {
  char v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 C_BFu0s_Us) C1{ Fc Fs:0 Fs}



static void Test_C_BFu0s_Us()
{
  {
    init_simple_test("C_BFu0s_Us");
    static STRUCT_IF_C C_BFu0s_Us lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu0s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "C_BFu0s_Us.v1");
    check_field_offset(lv, v2, 2, "C_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_Us, C_BFu0s_Us)
//============================================================================


struct  C_BFu0s_Vp  {
  char v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 C_BFu0s_Vp) C1{ Fc Fs:0 Fp}



static void Test_C_BFu0s_Vp()
{
  {
    init_simple_test("C_BFu0s_Vp");
    static STRUCT_IF_C C_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "C_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu0s_Vp, C_BFu0s_Vp)
//============================================================================


struct  C_BFu15i_BFu0c  {
  char v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 C_BFu15i_BFu0c) C1{ Fc Fi:15 Fc:0}



static void Test_C_BFu15i_BFu0c()
{
  {
    init_simple_test("C_BFu15i_BFu0c");
    static STRUCT_IF_C C_BFu15i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu0c, C_BFu15i_BFu0c)
//============================================================================


struct  C_BFu15i_BFu0i  {
  char v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 C_BFu15i_BFu0i) C1{ Fc Fi:15 Fi:0}



static void Test_C_BFu15i_BFu0i()
{
  {
    init_simple_test("C_BFu15i_BFu0i");
    static STRUCT_IF_C C_BFu15i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu0i, C_BFu15i_BFu0i)
//============================================================================


struct  C_BFu15i_BFu0ll  {
  char v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 C_BFu15i_BFu0ll) C1{ Fc Fi:15 FL:0}



static void Test_C_BFu15i_BFu0ll()
{
  {
    init_simple_test("C_BFu15i_BFu0ll");
    static STRUCT_IF_C C_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu0ll, C_BFu15i_BFu0ll)
//============================================================================


struct  C_BFu15i_BFu0s  {
  char v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 C_BFu15i_BFu0s) C1{ Fc Fi:15 Fs:0}



static void Test_C_BFu15i_BFu0s()
{
  {
    init_simple_test("C_BFu15i_BFu0s");
    static STRUCT_IF_C C_BFu15i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15i_BFu0s, C_BFu15i_BFu0s)
//============================================================================


struct  C_BFu15ll_BFu0c  {
  char v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 C_BFu15ll_BFu0c) C1{ Fc FL:15 Fc:0}



static void Test_C_BFu15ll_BFu0c()
{
  {
    init_simple_test("C_BFu15ll_BFu0c");
    static STRUCT_IF_C C_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu0c, C_BFu15ll_BFu0c)
//============================================================================


struct  C_BFu15ll_BFu0i  {
  char v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 C_BFu15ll_BFu0i) C1{ Fc FL:15 Fi:0}



static void Test_C_BFu15ll_BFu0i()
{
  {
    init_simple_test("C_BFu15ll_BFu0i");
    static STRUCT_IF_C C_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu0i, C_BFu15ll_BFu0i)
//============================================================================


struct  C_BFu15ll_BFu0ll  {
  char v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 C_BFu15ll_BFu0ll) C1{ Fc FL:15 FL:0}



static void Test_C_BFu15ll_BFu0ll()
{
  {
    init_simple_test("C_BFu15ll_BFu0ll");
    static STRUCT_IF_C C_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu0ll, C_BFu15ll_BFu0ll)
//============================================================================


struct  C_BFu15ll_BFu0s  {
  char v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 C_BFu15ll_BFu0s) C1{ Fc FL:15 Fs:0}



static void Test_C_BFu15ll_BFu0s()
{
  {
    init_simple_test("C_BFu15ll_BFu0s");
    static STRUCT_IF_C C_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 15, 1, "C_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 15, hide_ull(1LL<<14), "C_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15ll_BFu0s, C_BFu15ll_BFu0s)
//============================================================================


struct  C_BFu15s_BFu0c  {
  char v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 C_BFu15s_BFu0c) C1{ Fc Fs:15 Fc:0}



static void Test_C_BFu15s_BFu0c()
{
  {
    init_simple_test("C_BFu15s_BFu0c");
    static STRUCT_IF_C C_BFu15s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu0c, C_BFu15s_BFu0c)
//============================================================================


struct  C_BFu15s_BFu0i  {
  char v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 C_BFu15s_BFu0i) C1{ Fc Fs:15 Fi:0}



static void Test_C_BFu15s_BFu0i()
{
  {
    init_simple_test("C_BFu15s_BFu0i");
    static STRUCT_IF_C C_BFu15s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu0i, C_BFu15s_BFu0i)
//============================================================================


struct  C_BFu15s_BFu0ll  {
  char v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 C_BFu15s_BFu0ll) C1{ Fc Fs:15 FL:0}



static void Test_C_BFu15s_BFu0ll()
{
  {
    init_simple_test("C_BFu15s_BFu0ll");
    static STRUCT_IF_C C_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu0ll, C_BFu15s_BFu0ll)
//============================================================================


struct  C_BFu15s_BFu0s  {
  char v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 C_BFu15s_BFu0s) C1{ Fc Fs:15 Fs:0}



static void Test_C_BFu15s_BFu0s()
{
  {
    init_simple_test("C_BFu15s_BFu0s");
    static STRUCT_IF_C C_BFu15s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu15s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "C_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "C_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu15s_BFu0s, C_BFu15s_BFu0s)
//============================================================================


struct  C_BFu16i_BFu0c  {
  char v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 C_BFu16i_BFu0c) C1{ Fc Fi:16 Fc:0}



static void Test_C_BFu16i_BFu0c()
{
  {
    init_simple_test("C_BFu16i_BFu0c");
    static STRUCT_IF_C C_BFu16i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu0c, C_BFu16i_BFu0c)
//============================================================================


struct  C_BFu16i_BFu0i  {
  char v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 C_BFu16i_BFu0i) C1{ Fc Fi:16 Fi:0}



static void Test_C_BFu16i_BFu0i()
{
  {
    init_simple_test("C_BFu16i_BFu0i");
    static STRUCT_IF_C C_BFu16i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu0i, C_BFu16i_BFu0i)
//============================================================================


struct  C_BFu16i_BFu0ll  {
  char v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 C_BFu16i_BFu0ll) C1{ Fc Fi:16 FL:0}



static void Test_C_BFu16i_BFu0ll()
{
  {
    init_simple_test("C_BFu16i_BFu0ll");
    static STRUCT_IF_C C_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu0ll, C_BFu16i_BFu0ll)
//============================================================================


struct  C_BFu16i_BFu0s  {
  char v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 C_BFu16i_BFu0s) C1{ Fc Fi:16 Fs:0}



static void Test_C_BFu16i_BFu0s()
{
  {
    init_simple_test("C_BFu16i_BFu0s");
    static STRUCT_IF_C C_BFu16i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16i_BFu0s, C_BFu16i_BFu0s)
//============================================================================


struct  C_BFu16ll_BFu0c  {
  char v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 C_BFu16ll_BFu0c) C1{ Fc FL:16 Fc:0}



static void Test_C_BFu16ll_BFu0c()
{
  {
    init_simple_test("C_BFu16ll_BFu0c");
    static STRUCT_IF_C C_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu0c, C_BFu16ll_BFu0c)
//============================================================================


struct  C_BFu16ll_BFu0i  {
  char v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 C_BFu16ll_BFu0i) C1{ Fc FL:16 Fi:0}



static void Test_C_BFu16ll_BFu0i()
{
  {
    init_simple_test("C_BFu16ll_BFu0i");
    static STRUCT_IF_C C_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu0i, C_BFu16ll_BFu0i)
//============================================================================


struct  C_BFu16ll_BFu0ll  {
  char v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 C_BFu16ll_BFu0ll) C1{ Fc FL:16 FL:0}



static void Test_C_BFu16ll_BFu0ll()
{
  {
    init_simple_test("C_BFu16ll_BFu0ll");
    static STRUCT_IF_C C_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu0ll, C_BFu16ll_BFu0ll)
//============================================================================


struct  C_BFu16ll_BFu0s  {
  char v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 C_BFu16ll_BFu0s) C1{ Fc FL:16 Fs:0}



static void Test_C_BFu16ll_BFu0s()
{
  {
    init_simple_test("C_BFu16ll_BFu0s");
    static STRUCT_IF_C C_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 16, 1, "C_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 16, hide_ull(1LL<<15), "C_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16ll_BFu0s, C_BFu16ll_BFu0s)
//============================================================================


struct  C_BFu16s_BFu0c  {
  char v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 C_BFu16s_BFu0c) C1{ Fc Fs:16 Fc:0}



static void Test_C_BFu16s_BFu0c()
{
  {
    init_simple_test("C_BFu16s_BFu0c");
    static STRUCT_IF_C C_BFu16s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu0c, C_BFu16s_BFu0c)
//============================================================================


struct  C_BFu16s_BFu0i  {
  char v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 C_BFu16s_BFu0i) C1{ Fc Fs:16 Fi:0}



static void Test_C_BFu16s_BFu0i()
{
  {
    init_simple_test("C_BFu16s_BFu0i");
    static STRUCT_IF_C C_BFu16s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu0i, C_BFu16s_BFu0i)
//============================================================================


struct  C_BFu16s_BFu0ll  {
  char v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 C_BFu16s_BFu0ll) C1{ Fc Fs:16 FL:0}



static void Test_C_BFu16s_BFu0ll()
{
  {
    init_simple_test("C_BFu16s_BFu0ll");
    static STRUCT_IF_C C_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu0ll, C_BFu16s_BFu0ll)
//============================================================================


struct  C_BFu16s_BFu0s  {
  char v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 C_BFu16s_BFu0s) C1{ Fc Fs:16 Fs:0}



static void Test_C_BFu16s_BFu0s()
{
  {
    init_simple_test("C_BFu16s_BFu0s");
    static STRUCT_IF_C C_BFu16s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu16s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "C_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "C_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu16s_BFu0s, C_BFu16s_BFu0s)
//============================================================================


struct  C_BFu17i_BFu0c  {
  char v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 C_BFu17i_BFu0c) C1{ Fc Fi:17 Fc:0}



static void Test_C_BFu17i_BFu0c()
{
  {
    init_simple_test("C_BFu17i_BFu0c");
    static STRUCT_IF_C C_BFu17i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu0c, C_BFu17i_BFu0c)
//============================================================================


struct  C_BFu17i_BFu0i  {
  char v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 C_BFu17i_BFu0i) C1{ Fc Fi:17 Fi:0}



static void Test_C_BFu17i_BFu0i()
{
  {
    init_simple_test("C_BFu17i_BFu0i");
    static STRUCT_IF_C C_BFu17i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu0i, C_BFu17i_BFu0i)
//============================================================================


struct  C_BFu17i_BFu0ll  {
  char v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 C_BFu17i_BFu0ll) C1{ Fc Fi:17 FL:0}



static void Test_C_BFu17i_BFu0ll()
{
  {
    init_simple_test("C_BFu17i_BFu0ll");
    static STRUCT_IF_C C_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu0ll, C_BFu17i_BFu0ll)
//============================================================================


struct  C_BFu17i_BFu0s  {
  char v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 C_BFu17i_BFu0s) C1{ Fc Fi:17 Fs:0}



static void Test_C_BFu17i_BFu0s()
{
  {
    init_simple_test("C_BFu17i_BFu0s");
    static STRUCT_IF_C C_BFu17i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17i_BFu0s, C_BFu17i_BFu0s)
//============================================================================


struct  C_BFu17ll_BFu0c  {
  char v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 C_BFu17ll_BFu0c) C1{ Fc FL:17 Fc:0}



static void Test_C_BFu17ll_BFu0c()
{
  {
    init_simple_test("C_BFu17ll_BFu0c");
    static STRUCT_IF_C C_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu0c, C_BFu17ll_BFu0c)
//============================================================================


struct  C_BFu17ll_BFu0i  {
  char v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 C_BFu17ll_BFu0i) C1{ Fc FL:17 Fi:0}



static void Test_C_BFu17ll_BFu0i()
{
  {
    init_simple_test("C_BFu17ll_BFu0i");
    static STRUCT_IF_C C_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu0i, C_BFu17ll_BFu0i)
//============================================================================


struct  C_BFu17ll_BFu0ll  {
  char v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 C_BFu17ll_BFu0ll) C1{ Fc FL:17 FL:0}



static void Test_C_BFu17ll_BFu0ll()
{
  {
    init_simple_test("C_BFu17ll_BFu0ll");
    static STRUCT_IF_C C_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu0ll, C_BFu17ll_BFu0ll)
//============================================================================


struct  C_BFu17ll_BFu0s  {
  char v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 C_BFu17ll_BFu0s) C1{ Fc FL:17 Fs:0}



static void Test_C_BFu17ll_BFu0s()
{
  {
    init_simple_test("C_BFu17ll_BFu0s");
    static STRUCT_IF_C C_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 17, 1, "C_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 17, hide_ull(1LL<<16), "C_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu17ll_BFu0s, C_BFu17ll_BFu0s)
//============================================================================


struct  C_BFu1c_BFu0c  {
  char v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 C_BFu1c_BFu0c) C1{ Fc Fc:1 Fc:0}



static void Test_C_BFu1c_BFu0c()
{
  {
    init_simple_test("C_BFu1c_BFu0c");
    static STRUCT_IF_C C_BFu1c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu0c, C_BFu1c_BFu0c)
//============================================================================


struct  C_BFu1c_BFu0i  {
  char v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 C_BFu1c_BFu0i) C1{ Fc Fc:1 Fi:0}



static void Test_C_BFu1c_BFu0i()
{
  {
    init_simple_test("C_BFu1c_BFu0i");
    static STRUCT_IF_C C_BFu1c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu0i, C_BFu1c_BFu0i)
//============================================================================


struct  C_BFu1c_BFu0ll  {
  char v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 C_BFu1c_BFu0ll) C1{ Fc Fc:1 FL:0}



static void Test_C_BFu1c_BFu0ll()
{
  {
    init_simple_test("C_BFu1c_BFu0ll");
    static STRUCT_IF_C C_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu0ll, C_BFu1c_BFu0ll)
//============================================================================


struct  C_BFu1c_BFu0s  {
  char v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 C_BFu1c_BFu0s) C1{ Fc Fc:1 Fs:0}



static void Test_C_BFu1c_BFu0s()
{
  {
    init_simple_test("C_BFu1c_BFu0s");
    static STRUCT_IF_C C_BFu1c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1c_BFu0s, C_BFu1c_BFu0s)
//============================================================================


struct  C_BFu1i_BFu0c  {
  char v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 C_BFu1i_BFu0c) C1{ Fc Fi:1 Fc:0}



static void Test_C_BFu1i_BFu0c()
{
  {
    init_simple_test("C_BFu1i_BFu0c");
    static STRUCT_IF_C C_BFu1i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu0c, C_BFu1i_BFu0c)
//============================================================================


struct  C_BFu1i_BFu0i  {
  char v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 C_BFu1i_BFu0i) C1{ Fc Fi:1 Fi:0}



static void Test_C_BFu1i_BFu0i()
{
  {
    init_simple_test("C_BFu1i_BFu0i");
    static STRUCT_IF_C C_BFu1i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu0i, C_BFu1i_BFu0i)
//============================================================================


struct  C_BFu1i_BFu0ll  {
  char v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 C_BFu1i_BFu0ll) C1{ Fc Fi:1 FL:0}



static void Test_C_BFu1i_BFu0ll()
{
  {
    init_simple_test("C_BFu1i_BFu0ll");
    static STRUCT_IF_C C_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu0ll, C_BFu1i_BFu0ll)
//============================================================================


struct  C_BFu1i_BFu0s  {
  char v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 C_BFu1i_BFu0s) C1{ Fc Fi:1 Fs:0}



static void Test_C_BFu1i_BFu0s()
{
  {
    init_simple_test("C_BFu1i_BFu0s");
    static STRUCT_IF_C C_BFu1i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1i_BFu0s, C_BFu1i_BFu0s)
//============================================================================


struct  C_BFu1ll_BFu0c  {
  char v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 C_BFu1ll_BFu0c) C1{ Fc FL:1 Fc:0}



static void Test_C_BFu1ll_BFu0c()
{
  {
    init_simple_test("C_BFu1ll_BFu0c");
    static STRUCT_IF_C C_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu0c, C_BFu1ll_BFu0c)
//============================================================================


struct  C_BFu1ll_BFu0i  {
  char v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 C_BFu1ll_BFu0i) C1{ Fc FL:1 Fi:0}



static void Test_C_BFu1ll_BFu0i()
{
  {
    init_simple_test("C_BFu1ll_BFu0i");
    static STRUCT_IF_C C_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu0i, C_BFu1ll_BFu0i)
//============================================================================


struct  C_BFu1ll_BFu0ll  {
  char v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 C_BFu1ll_BFu0ll) C1{ Fc FL:1 FL:0}



static void Test_C_BFu1ll_BFu0ll()
{
  {
    init_simple_test("C_BFu1ll_BFu0ll");
    static STRUCT_IF_C C_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu0ll, C_BFu1ll_BFu0ll)
//============================================================================


struct  C_BFu1ll_BFu0s  {
  char v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 C_BFu1ll_BFu0s) C1{ Fc FL:1 Fs:0}



static void Test_C_BFu1ll_BFu0s()
{
  {
    init_simple_test("C_BFu1ll_BFu0s");
    static STRUCT_IF_C C_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1ll_BFu0s, C_BFu1ll_BFu0s)
//============================================================================


struct  C_BFu1s_BFu0c  {
  char v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 C_BFu1s_BFu0c) C1{ Fc Fs:1 Fc:0}



static void Test_C_BFu1s_BFu0c()
{
  {
    init_simple_test("C_BFu1s_BFu0c");
    static STRUCT_IF_C C_BFu1s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu0c, C_BFu1s_BFu0c)
//============================================================================


struct  C_BFu1s_BFu0i  {
  char v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 C_BFu1s_BFu0i) C1{ Fc Fs:1 Fi:0}



static void Test_C_BFu1s_BFu0i()
{
  {
    init_simple_test("C_BFu1s_BFu0i");
    static STRUCT_IF_C C_BFu1s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu0i, C_BFu1s_BFu0i)
//============================================================================


struct  C_BFu1s_BFu0ll  {
  char v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 C_BFu1s_BFu0ll) C1{ Fc Fs:1 FL:0}



static void Test_C_BFu1s_BFu0ll()
{
  {
    init_simple_test("C_BFu1s_BFu0ll");
    static STRUCT_IF_C C_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu0ll, C_BFu1s_BFu0ll)
//============================================================================


struct  C_BFu1s_BFu0s  {
  char v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 C_BFu1s_BFu0s) C1{ Fc Fs:1 Fs:0}



static void Test_C_BFu1s_BFu0s()
{
  {
    init_simple_test("C_BFu1s_BFu0s");
    static STRUCT_IF_C C_BFu1s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu1s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 1, 1, "C_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu1s_BFu0s, C_BFu1s_BFu0s)
//============================================================================


struct  C_BFu31i_BFu0c  {
  char v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 C_BFu31i_BFu0c) C1{ Fc Fi:31 Fc:0}



static void Test_C_BFu31i_BFu0c()
{
  {
    init_simple_test("C_BFu31i_BFu0c");
    static STRUCT_IF_C C_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu0c, C_BFu31i_BFu0c)
//============================================================================


struct  C_BFu31i_BFu0i  {
  char v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 C_BFu31i_BFu0i) C1{ Fc Fi:31 Fi:0}



static void Test_C_BFu31i_BFu0i()
{
  {
    init_simple_test("C_BFu31i_BFu0i");
    static STRUCT_IF_C C_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu0i, C_BFu31i_BFu0i)
//============================================================================


struct  C_BFu31i_BFu0ll  {
  char v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 C_BFu31i_BFu0ll) C1{ Fc Fi:31 FL:0}



static void Test_C_BFu31i_BFu0ll()
{
  {
    init_simple_test("C_BFu31i_BFu0ll");
    static STRUCT_IF_C C_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu0ll, C_BFu31i_BFu0ll)
//============================================================================


struct  C_BFu31i_BFu0s  {
  char v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 C_BFu31i_BFu0s) C1{ Fc Fi:31 Fs:0}



static void Test_C_BFu31i_BFu0s()
{
  {
    init_simple_test("C_BFu31i_BFu0s");
    static STRUCT_IF_C C_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "C_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "C_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31i_BFu0s, C_BFu31i_BFu0s)
//============================================================================


struct  C_BFu31ll_BFu0c  {
  char v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 C_BFu31ll_BFu0c) C1{ Fc FL:31 Fc:0}



static void Test_C_BFu31ll_BFu0c()
{
  {
    init_simple_test("C_BFu31ll_BFu0c");
    static STRUCT_IF_C C_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu0c, C_BFu31ll_BFu0c)
//============================================================================


struct  C_BFu31ll_BFu0i  {
  char v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 C_BFu31ll_BFu0i) C1{ Fc FL:31 Fi:0}



static void Test_C_BFu31ll_BFu0i()
{
  {
    init_simple_test("C_BFu31ll_BFu0i");
    static STRUCT_IF_C C_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu0i, C_BFu31ll_BFu0i)
//============================================================================


struct  C_BFu31ll_BFu0ll  {
  char v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 C_BFu31ll_BFu0ll) C1{ Fc FL:31 FL:0}



static void Test_C_BFu31ll_BFu0ll()
{
  {
    init_simple_test("C_BFu31ll_BFu0ll");
    static STRUCT_IF_C C_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu0ll, C_BFu31ll_BFu0ll)
//============================================================================


struct  C_BFu31ll_BFu0s  {
  char v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 C_BFu31ll_BFu0s) C1{ Fc FL:31 Fs:0}



static void Test_C_BFu31ll_BFu0s()
{
  {
    init_simple_test("C_BFu31ll_BFu0s");
    static STRUCT_IF_C C_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 31, 1, "C_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 31, hide_ull(1LL<<30), "C_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu31ll_BFu0s, C_BFu31ll_BFu0s)
//============================================================================


struct  C_BFu32i_BFu0c  {
  char v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 C_BFu32i_BFu0c) C1{ Fc Fi:32 Fc:0}



static void Test_C_BFu32i_BFu0c()
{
  {
    init_simple_test("C_BFu32i_BFu0c");
    static STRUCT_IF_C C_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu0c, C_BFu32i_BFu0c)
//============================================================================


struct  C_BFu32i_BFu0i  {
  char v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 C_BFu32i_BFu0i) C1{ Fc Fi:32 Fi:0}



static void Test_C_BFu32i_BFu0i()
{
  {
    init_simple_test("C_BFu32i_BFu0i");
    static STRUCT_IF_C C_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu0i, C_BFu32i_BFu0i)
//============================================================================


struct  C_BFu32i_BFu0ll  {
  char v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 C_BFu32i_BFu0ll) C1{ Fc Fi:32 FL:0}



static void Test_C_BFu32i_BFu0ll()
{
  {
    init_simple_test("C_BFu32i_BFu0ll");
    static STRUCT_IF_C C_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu0ll, C_BFu32i_BFu0ll)
//============================================================================


struct  C_BFu32i_BFu0s  {
  char v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 C_BFu32i_BFu0s) C1{ Fc Fi:32 Fs:0}



static void Test_C_BFu32i_BFu0s()
{
  {
    init_simple_test("C_BFu32i_BFu0s");
    static STRUCT_IF_C C_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "C_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "C_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32i_BFu0s, C_BFu32i_BFu0s)
//============================================================================


struct  C_BFu32ll_BFu0c  {
  char v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 C_BFu32ll_BFu0c) C1{ Fc FL:32 Fc:0}



static void Test_C_BFu32ll_BFu0c()
{
  {
    init_simple_test("C_BFu32ll_BFu0c");
    static STRUCT_IF_C C_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu0c, C_BFu32ll_BFu0c)
//============================================================================


struct  C_BFu32ll_BFu0i  {
  char v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 C_BFu32ll_BFu0i) C1{ Fc FL:32 Fi:0}



static void Test_C_BFu32ll_BFu0i()
{
  {
    init_simple_test("C_BFu32ll_BFu0i");
    static STRUCT_IF_C C_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu0i, C_BFu32ll_BFu0i)
//============================================================================


struct  C_BFu32ll_BFu0ll  {
  char v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 C_BFu32ll_BFu0ll) C1{ Fc FL:32 FL:0}



static void Test_C_BFu32ll_BFu0ll()
{
  {
    init_simple_test("C_BFu32ll_BFu0ll");
    static STRUCT_IF_C C_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu0ll, C_BFu32ll_BFu0ll)
//============================================================================


struct  C_BFu32ll_BFu0s  {
  char v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 C_BFu32ll_BFu0s) C1{ Fc FL:32 Fs:0}



static void Test_C_BFu32ll_BFu0s()
{
  {
    init_simple_test("C_BFu32ll_BFu0s");
    static STRUCT_IF_C C_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 32, 1, "C_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 32, hide_ull(1LL<<31), "C_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu32ll_BFu0s, C_BFu32ll_BFu0s)
//============================================================================


struct  C_BFu33_BFu0c  {
  char v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 C_BFu33_BFu0c) C1{ Fc FL:33 Fc:0}



static void Test_C_BFu33_BFu0c()
{
  {
    init_simple_test("C_BFu33_BFu0c");
    static STRUCT_IF_C C_BFu33_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu0c, C_BFu33_BFu0c)
//============================================================================


struct  C_BFu33_BFu0i  {
  char v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 C_BFu33_BFu0i) C1{ Fc FL:33 Fi:0}



static void Test_C_BFu33_BFu0i()
{
  {
    init_simple_test("C_BFu33_BFu0i");
    static STRUCT_IF_C C_BFu33_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu0i, C_BFu33_BFu0i)
//============================================================================


struct  C_BFu33_BFu0ll  {
  char v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 C_BFu33_BFu0ll) C1{ Fc FL:33 FL:0}



static void Test_C_BFu33_BFu0ll()
{
  {
    init_simple_test("C_BFu33_BFu0ll");
    static STRUCT_IF_C C_BFu33_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu0ll, C_BFu33_BFu0ll)
//============================================================================


struct  C_BFu33_BFu0s  {
  char v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 C_BFu33_BFu0s) C1{ Fc FL:33 Fs:0}



static void Test_C_BFu33_BFu0s()
{
  {
    init_simple_test("C_BFu33_BFu0s");
    static STRUCT_IF_C C_BFu33_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 33, 1, "C_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 33, hide_ull(1LL<<32), "C_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu33_BFu0s, C_BFu33_BFu0s)
//============================================================================


struct  C_BFu7c_BFu0c  {
  char v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 C_BFu7c_BFu0c) C1{ Fc Fc:7 Fc:0}



static void Test_C_BFu7c_BFu0c()
{
  {
    init_simple_test("C_BFu7c_BFu0c");
    static STRUCT_IF_C C_BFu7c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu7c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7c_BFu0c, C_BFu7c_BFu0c)
//============================================================================


struct  C_BFu7c_BFu0i  {
  char v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 C_BFu7c_BFu0i) C1{ Fc Fc:7 Fi:0}



static void Test_C_BFu7c_BFu0i()
{
  {
    init_simple_test("C_BFu7c_BFu0i");
    static STRUCT_IF_C C_BFu7c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7c_BFu0i, C_BFu7c_BFu0i)
//============================================================================


struct  C_BFu7c_BFu0ll  {
  char v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 C_BFu7c_BFu0ll) C1{ Fc Fc:7 FL:0}



static void Test_C_BFu7c_BFu0ll()
{
  {
    init_simple_test("C_BFu7c_BFu0ll");
    static STRUCT_IF_C C_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7c_BFu0ll, C_BFu7c_BFu0ll)
//============================================================================


struct  C_BFu7c_BFu0s  {
  char v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 C_BFu7c_BFu0s) C1{ Fc Fc:7 Fs:0}



static void Test_C_BFu7c_BFu0s()
{
  {
    init_simple_test("C_BFu7c_BFu0s");
    static STRUCT_IF_C C_BFu7c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7c_BFu0s, C_BFu7c_BFu0s)
//============================================================================


struct  C_BFu7i_BFu0c  {
  char v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 C_BFu7i_BFu0c) C1{ Fc Fi:7 Fc:0}



static void Test_C_BFu7i_BFu0c()
{
  {
    init_simple_test("C_BFu7i_BFu0c");
    static STRUCT_IF_C C_BFu7i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7i_BFu0c, C_BFu7i_BFu0c)
//============================================================================


struct  C_BFu7i_BFu0i  {
  char v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 C_BFu7i_BFu0i) C1{ Fc Fi:7 Fi:0}



static void Test_C_BFu7i_BFu0i()
{
  {
    init_simple_test("C_BFu7i_BFu0i");
    static STRUCT_IF_C C_BFu7i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7i_BFu0i, C_BFu7i_BFu0i)
//============================================================================


struct  C_BFu7i_BFu0ll  {
  char v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 C_BFu7i_BFu0ll) C1{ Fc Fi:7 FL:0}



static void Test_C_BFu7i_BFu0ll()
{
  {
    init_simple_test("C_BFu7i_BFu0ll");
    static STRUCT_IF_C C_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7i_BFu0ll, C_BFu7i_BFu0ll)
//============================================================================


struct  C_BFu7i_BFu0s  {
  char v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 C_BFu7i_BFu0s) C1{ Fc Fi:7 Fs:0}



static void Test_C_BFu7i_BFu0s()
{
  {
    init_simple_test("C_BFu7i_BFu0s");
    static STRUCT_IF_C C_BFu7i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7i_BFu0s, C_BFu7i_BFu0s)
//============================================================================


struct  C_BFu7ll_BFu0c  {
  char v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 C_BFu7ll_BFu0c) C1{ Fc FL:7 Fc:0}



static void Test_C_BFu7ll_BFu0c()
{
  {
    init_simple_test("C_BFu7ll_BFu0c");
    static STRUCT_IF_C C_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7ll_BFu0c, C_BFu7ll_BFu0c)
//============================================================================


struct  C_BFu7ll_BFu0i  {
  char v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 C_BFu7ll_BFu0i) C1{ Fc FL:7 Fi:0}



static void Test_C_BFu7ll_BFu0i()
{
  {
    init_simple_test("C_BFu7ll_BFu0i");
    static STRUCT_IF_C C_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7ll_BFu0i, C_BFu7ll_BFu0i)
//============================================================================


struct  C_BFu7ll_BFu0ll  {
  char v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 C_BFu7ll_BFu0ll) C1{ Fc FL:7 FL:0}



static void Test_C_BFu7ll_BFu0ll()
{
  {
    init_simple_test("C_BFu7ll_BFu0ll");
    static STRUCT_IF_C C_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7ll_BFu0ll, C_BFu7ll_BFu0ll)
//============================================================================


struct  C_BFu7ll_BFu0s  {
  char v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 C_BFu7ll_BFu0s) C1{ Fc FL:7 Fs:0}



static void Test_C_BFu7ll_BFu0s()
{
  {
    init_simple_test("C_BFu7ll_BFu0s");
    static STRUCT_IF_C C_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7ll_BFu0s, C_BFu7ll_BFu0s)
//============================================================================


struct  C_BFu7s_BFu0c  {
  char v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 C_BFu7s_BFu0c) C1{ Fc Fs:7 Fc:0}



static void Test_C_BFu7s_BFu0c()
{
  {
    init_simple_test("C_BFu7s_BFu0c");
    static STRUCT_IF_C C_BFu7s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu7s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7s_BFu0c, C_BFu7s_BFu0c)
//============================================================================


struct  C_BFu7s_BFu0i  {
  char v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 C_BFu7s_BFu0i) C1{ Fc Fs:7 Fi:0}



static void Test_C_BFu7s_BFu0i()
{
  {
    init_simple_test("C_BFu7s_BFu0i");
    static STRUCT_IF_C C_BFu7s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7s_BFu0i, C_BFu7s_BFu0i)
//============================================================================


struct  C_BFu7s_BFu0ll  {
  char v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 C_BFu7s_BFu0ll) C1{ Fc Fs:7 FL:0}



static void Test_C_BFu7s_BFu0ll()
{
  {
    init_simple_test("C_BFu7s_BFu0ll");
    static STRUCT_IF_C C_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7s_BFu0ll, C_BFu7s_BFu0ll)
//============================================================================


struct  C_BFu7s_BFu0s  {
  char v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 C_BFu7s_BFu0s) C1{ Fc Fs:7 Fs:0}



static void Test_C_BFu7s_BFu0s()
{
  {
    init_simple_test("C_BFu7s_BFu0s");
    static STRUCT_IF_C C_BFu7s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu7s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "C_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "C_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu7s_BFu0s, C_BFu7s_BFu0s)
//============================================================================


struct  C_BFu8c_BFu0c  {
  char v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 C_BFu8c_BFu0c) C1{ Fc Fc:8 Fc:0}



static void Test_C_BFu8c_BFu0c()
{
  {
    init_simple_test("C_BFu8c_BFu0c");
    static STRUCT_IF_C C_BFu8c_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu8c_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8c_BFu0c, C_BFu8c_BFu0c)
//============================================================================


struct  C_BFu8c_BFu0i  {
  char v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 C_BFu8c_BFu0i) C1{ Fc Fc:8 Fi:0}



static void Test_C_BFu8c_BFu0i()
{
  {
    init_simple_test("C_BFu8c_BFu0i");
    static STRUCT_IF_C C_BFu8c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8c_BFu0i, C_BFu8c_BFu0i)
//============================================================================


struct  C_BFu8c_BFu0ll  {
  char v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 C_BFu8c_BFu0ll) C1{ Fc Fc:8 FL:0}



static void Test_C_BFu8c_BFu0ll()
{
  {
    init_simple_test("C_BFu8c_BFu0ll");
    static STRUCT_IF_C C_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8c_BFu0ll, C_BFu8c_BFu0ll)
//============================================================================


struct  C_BFu8c_BFu0s  {
  char v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 C_BFu8c_BFu0s) C1{ Fc Fc:8 Fs:0}



static void Test_C_BFu8c_BFu0s()
{
  {
    init_simple_test("C_BFu8c_BFu0s");
    static STRUCT_IF_C C_BFu8c_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8c_BFu0s, C_BFu8c_BFu0s)
//============================================================================


struct  C_BFu8i_BFu0c  {
  char v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 C_BFu8i_BFu0c) C1{ Fc Fi:8 Fc:0}



static void Test_C_BFu8i_BFu0c()
{
  {
    init_simple_test("C_BFu8i_BFu0c");
    static STRUCT_IF_C C_BFu8i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8i_BFu0c, C_BFu8i_BFu0c)
//============================================================================


struct  C_BFu8i_BFu0i  {
  char v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 C_BFu8i_BFu0i) C1{ Fc Fi:8 Fi:0}



static void Test_C_BFu8i_BFu0i()
{
  {
    init_simple_test("C_BFu8i_BFu0i");
    static STRUCT_IF_C C_BFu8i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8i_BFu0i, C_BFu8i_BFu0i)
//============================================================================


struct  C_BFu8i_BFu0ll  {
  char v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 C_BFu8i_BFu0ll) C1{ Fc Fi:8 FL:0}



static void Test_C_BFu8i_BFu0ll()
{
  {
    init_simple_test("C_BFu8i_BFu0ll");
    static STRUCT_IF_C C_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8i_BFu0ll, C_BFu8i_BFu0ll)
//============================================================================


struct  C_BFu8i_BFu0s  {
  char v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 C_BFu8i_BFu0s) C1{ Fc Fi:8 Fs:0}



static void Test_C_BFu8i_BFu0s()
{
  {
    init_simple_test("C_BFu8i_BFu0s");
    static STRUCT_IF_C C_BFu8i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8i_BFu0s, C_BFu8i_BFu0s)
//============================================================================


struct  C_BFu8ll_BFu0c  {
  char v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 C_BFu8ll_BFu0c) C1{ Fc FL:8 Fc:0}



static void Test_C_BFu8ll_BFu0c()
{
  {
    init_simple_test("C_BFu8ll_BFu0c");
    static STRUCT_IF_C C_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8ll_BFu0c, C_BFu8ll_BFu0c)
//============================================================================


struct  C_BFu8ll_BFu0i  {
  char v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 C_BFu8ll_BFu0i) C1{ Fc FL:8 Fi:0}



static void Test_C_BFu8ll_BFu0i()
{
  {
    init_simple_test("C_BFu8ll_BFu0i");
    static STRUCT_IF_C C_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8ll_BFu0i, C_BFu8ll_BFu0i)
//============================================================================


struct  C_BFu8ll_BFu0ll  {
  char v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 C_BFu8ll_BFu0ll) C1{ Fc FL:8 FL:0}



static void Test_C_BFu8ll_BFu0ll()
{
  {
    init_simple_test("C_BFu8ll_BFu0ll");
    static STRUCT_IF_C C_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8ll_BFu0ll, C_BFu8ll_BFu0ll)
//============================================================================


struct  C_BFu8ll_BFu0s  {
  char v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 C_BFu8ll_BFu0s) C1{ Fc FL:8 Fs:0}



static void Test_C_BFu8ll_BFu0s()
{
  {
    init_simple_test("C_BFu8ll_BFu0s");
    static STRUCT_IF_C C_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8ll_BFu0s, C_BFu8ll_BFu0s)
//============================================================================


struct  C_BFu8s_BFu0c  {
  char v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 C_BFu8s_BFu0c) C1{ Fc Fs:8 Fc:0}



static void Test_C_BFu8s_BFu0c()
{
  {
    init_simple_test("C_BFu8s_BFu0c");
    static STRUCT_IF_C C_BFu8s_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu8s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8s_BFu0c, C_BFu8s_BFu0c)
//============================================================================


struct  C_BFu8s_BFu0i  {
  char v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 C_BFu8s_BFu0i) C1{ Fc Fs:8 Fi:0}



static void Test_C_BFu8s_BFu0i()
{
  {
    init_simple_test("C_BFu8s_BFu0i");
    static STRUCT_IF_C C_BFu8s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8s_BFu0i, C_BFu8s_BFu0i)
//============================================================================


struct  C_BFu8s_BFu0ll  {
  char v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 C_BFu8s_BFu0ll) C1{ Fc Fs:8 FL:0}



static void Test_C_BFu8s_BFu0ll()
{
  {
    init_simple_test("C_BFu8s_BFu0ll");
    static STRUCT_IF_C C_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8s_BFu0ll, C_BFu8s_BFu0ll)
//============================================================================


struct  C_BFu8s_BFu0s  {
  char v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 C_BFu8s_BFu0s) C1{ Fc Fs:8 Fs:0}



static void Test_C_BFu8s_BFu0s()
{
  {
    init_simple_test("C_BFu8s_BFu0s");
    static STRUCT_IF_C C_BFu8s_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_BFu8s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "C_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "C_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu8s_BFu0s, C_BFu8s_BFu0s)
//============================================================================


struct  C_BFu9i_BFu0c  {
  char v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 C_BFu9i_BFu0c) C1{ Fc Fi:9 Fc:0}



static void Test_C_BFu9i_BFu0c()
{
  {
    init_simple_test("C_BFu9i_BFu0c");
    static STRUCT_IF_C C_BFu9i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9i_BFu0c, C_BFu9i_BFu0c)
//============================================================================


struct  C_BFu9i_BFu0i  {
  char v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 C_BFu9i_BFu0i) C1{ Fc Fi:9 Fi:0}



static void Test_C_BFu9i_BFu0i()
{
  {
    init_simple_test("C_BFu9i_BFu0i");
    static STRUCT_IF_C C_BFu9i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9i_BFu0i, C_BFu9i_BFu0i)
//============================================================================


struct  C_BFu9i_BFu0ll  {
  char v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 C_BFu9i_BFu0ll) C1{ Fc Fi:9 FL:0}



static void Test_C_BFu9i_BFu0ll()
{
  {
    init_simple_test("C_BFu9i_BFu0ll");
    static STRUCT_IF_C C_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9i_BFu0ll, C_BFu9i_BFu0ll)
//============================================================================


struct  C_BFu9i_BFu0s  {
  char v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 C_BFu9i_BFu0s) C1{ Fc Fi:9 Fs:0}



static void Test_C_BFu9i_BFu0s()
{
  {
    init_simple_test("C_BFu9i_BFu0s");
    static STRUCT_IF_C C_BFu9i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9i_BFu0s, C_BFu9i_BFu0s)
//============================================================================


struct  C_BFu9ll_BFu0c  {
  char v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 C_BFu9ll_BFu0c) C1{ Fc FL:9 Fc:0}



static void Test_C_BFu9ll_BFu0c()
{
  {
    init_simple_test("C_BFu9ll_BFu0c");
    static STRUCT_IF_C C_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9ll_BFu0c, C_BFu9ll_BFu0c)
//============================================================================


struct  C_BFu9ll_BFu0i  {
  char v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 C_BFu9ll_BFu0i) C1{ Fc FL:9 Fi:0}



static void Test_C_BFu9ll_BFu0i()
{
  {
    init_simple_test("C_BFu9ll_BFu0i");
    static STRUCT_IF_C C_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9ll_BFu0i, C_BFu9ll_BFu0i)
//============================================================================


struct  C_BFu9ll_BFu0ll  {
  char v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 C_BFu9ll_BFu0ll) C1{ Fc FL:9 FL:0}



static void Test_C_BFu9ll_BFu0ll()
{
  {
    init_simple_test("C_BFu9ll_BFu0ll");
    static STRUCT_IF_C C_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9ll_BFu0ll, C_BFu9ll_BFu0ll)
//============================================================================


struct  C_BFu9ll_BFu0s  {
  char v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 C_BFu9ll_BFu0s) C1{ Fc FL:9 Fs:0}



static void Test_C_BFu9ll_BFu0s()
{
  {
    init_simple_test("C_BFu9ll_BFu0s");
    static STRUCT_IF_C C_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 1, 0, 9, 1, "C_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 1, 0, 9, hide_ull(1LL<<8), "C_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9ll_BFu0s, C_BFu9ll_BFu0s)
//============================================================================


struct  C_BFu9s_BFu0c  {
  char v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 C_BFu9s_BFu0c) C1{ Fc Fs:9 Fc:0}



static void Test_C_BFu9s_BFu0c()
{
  {
    init_simple_test("C_BFu9s_BFu0c");
    static STRUCT_IF_C C_BFu9s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu9s_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "C_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9s_BFu0c, C_BFu9s_BFu0c)
//============================================================================


struct  C_BFu9s_BFu0i  {
  char v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 C_BFu9s_BFu0i) C1{ Fc Fs:9 Fi:0}



static void Test_C_BFu9s_BFu0i()
{
  {
    init_simple_test("C_BFu9s_BFu0i");
    static STRUCT_IF_C C_BFu9s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "C_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9s_BFu0i, C_BFu9s_BFu0i)
//============================================================================


struct  C_BFu9s_BFu0ll  {
  char v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 C_BFu9s_BFu0ll) C1{ Fc Fs:9 FL:0}



static void Test_C_BFu9s_BFu0ll()
{
  {
    init_simple_test("C_BFu9s_BFu0ll");
    static STRUCT_IF_C C_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9s_BFu0ll, C_BFu9s_BFu0ll)
//============================================================================


struct  C_BFu9s_BFu0s  {
  char v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 C_BFu9s_BFu0s) C1{ Fc Fs:9 Fs:0}



static void Test_C_BFu9s_BFu0s()
{
  {
    init_simple_test("C_BFu9s_BFu0s");
    static STRUCT_IF_C C_BFu9s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_BFu9s_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "C_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "C_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "C_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_C_BFu9s_BFu0s, C_BFu9s_BFu0s)
//============================================================================


struct  C_C_BFu0c  {
  char v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 C_C_BFu0c) C1{ Fc[2] Fc:0}



static void Test_C_C_BFu0c()
{
  {
    init_simple_test("C_C_BFu0c");
    static STRUCT_IF_C C_C_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_C_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_C_BFu0c)");
    check_field_offset(lv, v1, 0, "C_C_BFu0c.v1");
    check_field_offset(lv, v2, 1, "C_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_C_BFu0c, C_C_BFu0c)
//============================================================================


struct  C_C_BFu0i  {
  char v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 C_C_BFu0i) C1{ Fc[2] Fi:0}



static void Test_C_C_BFu0i()
{
  {
    init_simple_test("C_C_BFu0i");
    static STRUCT_IF_C C_C_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_C_BFu0i)");
    check_field_offset(lv, v1, 0, "C_C_BFu0i.v1");
    check_field_offset(lv, v2, 1, "C_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_C_BFu0i, C_C_BFu0i)
//============================================================================


struct  C_C_BFu0ll  {
  char v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 C_C_BFu0ll) C1{ Fc[2] FL:0}



static void Test_C_C_BFu0ll()
{
  {
    init_simple_test("C_C_BFu0ll");
    static STRUCT_IF_C C_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_C_BFu0ll.v1");
    check_field_offset(lv, v2, 1, "C_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_C_BFu0ll, C_C_BFu0ll)
//============================================================================


struct  C_C_BFu0s  {
  char v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 C_C_BFu0s) C1{ Fc[2] Fs:0}



static void Test_C_C_BFu0s()
{
  {
    init_simple_test("C_C_BFu0s");
    static STRUCT_IF_C C_C_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_C_BFu0s)");
    check_field_offset(lv, v1, 0, "C_C_BFu0s.v1");
    check_field_offset(lv, v2, 1, "C_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_C_BFu0s, C_C_BFu0s)
//============================================================================


struct  C_D_BFu0c  {
  char v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 C_D_BFu0c) C1{ Fc FL Fc:0}



static void Test_C_D_BFu0c()
{
  {
    init_simple_test("C_D_BFu0c");
    static STRUCT_IF_C C_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_D_BFu0c)");
    check_field_offset(lv, v1, 0, "C_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_D_BFu0c, C_D_BFu0c)
//============================================================================


struct  C_D_BFu0i  {
  char v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 C_D_BFu0i) C1{ Fc FL Fi:0}



static void Test_C_D_BFu0i()
{
  {
    init_simple_test("C_D_BFu0i");
    static STRUCT_IF_C C_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_D_BFu0i)");
    check_field_offset(lv, v1, 0, "C_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_D_BFu0i, C_D_BFu0i)
//============================================================================


struct  C_D_BFu0ll  {
  char v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 C_D_BFu0ll) C1{ Fc FL FL:0}



static void Test_C_D_BFu0ll()
{
  {
    init_simple_test("C_D_BFu0ll");
    static STRUCT_IF_C C_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_D_BFu0ll, C_D_BFu0ll)
//============================================================================


struct  C_D_BFu0s  {
  char v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 C_D_BFu0s) C1{ Fc FL Fs:0}



static void Test_C_D_BFu0s()
{
  {
    init_simple_test("C_D_BFu0s");
    static STRUCT_IF_C C_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_D_BFu0s)");
    check_field_offset(lv, v1, 0, "C_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_D_BFu0s, C_D_BFu0s)
//============================================================================


struct  C_F_BFu0c  {
  char v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 C_F_BFu0c) C1{ Fc Fi Fc:0}



static void Test_C_F_BFu0c()
{
  {
    init_simple_test("C_F_BFu0c");
    static STRUCT_IF_C C_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_F_BFu0c)");
    check_field_offset(lv, v1, 0, "C_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "C_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_F_BFu0c, C_F_BFu0c)
//============================================================================


struct  C_F_BFu0i  {
  char v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 C_F_BFu0i) C1{ Fc Fi Fi:0}



static void Test_C_F_BFu0i()
{
  {
    init_simple_test("C_F_BFu0i");
    static STRUCT_IF_C C_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_F_BFu0i)");
    check_field_offset(lv, v1, 0, "C_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "C_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_F_BFu0i, C_F_BFu0i)
//============================================================================


struct  C_F_BFu0ll  {
  char v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 C_F_BFu0ll) C1{ Fc Fi FL:0}



static void Test_C_F_BFu0ll()
{
  {
    init_simple_test("C_F_BFu0ll");
    static STRUCT_IF_C C_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "C_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_F_BFu0ll, C_F_BFu0ll)
//============================================================================


struct  C_F_BFu0s  {
  char v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 C_F_BFu0s) C1{ Fc Fi Fs:0}



static void Test_C_F_BFu0s()
{
  {
    init_simple_test("C_F_BFu0s");
    static STRUCT_IF_C C_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_F_BFu0s)");
    check_field_offset(lv, v1, 0, "C_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "C_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_F_BFu0s, C_F_BFu0s)
//============================================================================


struct  C_I_BFu0c  {
  char v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 C_I_BFu0c) C1{ Fc Fi Fc:0}



static void Test_C_I_BFu0c()
{
  {
    init_simple_test("C_I_BFu0c");
    static STRUCT_IF_C C_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_I_BFu0c)");
    check_field_offset(lv, v1, 0, "C_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "C_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_I_BFu0c, C_I_BFu0c)
//============================================================================


struct  C_I_BFu0i  {
  char v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 C_I_BFu0i) C1{ Fc Fi Fi:0}



static void Test_C_I_BFu0i()
{
  {
    init_simple_test("C_I_BFu0i");
    static STRUCT_IF_C C_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_I_BFu0i)");
    check_field_offset(lv, v1, 0, "C_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "C_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_I_BFu0i, C_I_BFu0i)
//============================================================================


struct  C_I_BFu0ll  {
  char v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 C_I_BFu0ll) C1{ Fc Fi FL:0}



static void Test_C_I_BFu0ll()
{
  {
    init_simple_test("C_I_BFu0ll");
    static STRUCT_IF_C C_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "C_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_I_BFu0ll, C_I_BFu0ll)
//============================================================================


struct  C_I_BFu0s  {
  char v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 C_I_BFu0s) C1{ Fc Fi Fs:0}



static void Test_C_I_BFu0s()
{
  {
    init_simple_test("C_I_BFu0s");
    static STRUCT_IF_C C_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_I_BFu0s)");
    check_field_offset(lv, v1, 0, "C_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "C_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_I_BFu0s, C_I_BFu0s)
//============================================================================


struct  C_Ip_BFu0c  {
  char v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 C_Ip_BFu0c) C1{ Fc Fp Fc:0}



static void Test_C_Ip_BFu0c()
{
  {
    init_simple_test("C_Ip_BFu0c");
    static STRUCT_IF_C C_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "C_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ip_BFu0c, C_Ip_BFu0c)
//============================================================================


struct  C_Ip_BFu0i  {
  char v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 C_Ip_BFu0i) C1{ Fc Fp Fi:0}



static void Test_C_Ip_BFu0i()
{
  {
    init_simple_test("C_Ip_BFu0i");
    static STRUCT_IF_C C_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "C_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ip_BFu0i, C_Ip_BFu0i)
//============================================================================


struct  C_Ip_BFu0ll  {
  char v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 C_Ip_BFu0ll) C1{ Fc Fp FL:0}



static void Test_C_Ip_BFu0ll()
{
  {
    init_simple_test("C_Ip_BFu0ll");
    static STRUCT_IF_C C_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ip_BFu0ll, C_Ip_BFu0ll)
//============================================================================


struct  C_Ip_BFu0s  {
  char v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 C_Ip_BFu0s) C1{ Fc Fp Fs:0}



static void Test_C_Ip_BFu0s()
{
  {
    init_simple_test("C_Ip_BFu0s");
    static STRUCT_IF_C C_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "C_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ip_BFu0s, C_Ip_BFu0s)
//============================================================================


struct  C_L_BFu0c  {
  char v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 C_L_BFu0c) C1{ Fc FL Fc:0}



static void Test_C_L_BFu0c()
{
  {
    init_simple_test("C_L_BFu0c");
    static STRUCT_IF_C C_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_L_BFu0c)");
    check_field_offset(lv, v1, 0, "C_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_L_BFu0c, C_L_BFu0c)
//============================================================================


struct  C_L_BFu0i  {
  char v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 C_L_BFu0i) C1{ Fc FL Fi:0}



static void Test_C_L_BFu0i()
{
  {
    init_simple_test("C_L_BFu0i");
    static STRUCT_IF_C C_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_L_BFu0i)");
    check_field_offset(lv, v1, 0, "C_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_L_BFu0i, C_L_BFu0i)
//============================================================================


struct  C_L_BFu0ll  {
  char v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 C_L_BFu0ll) C1{ Fc FL FL:0}



static void Test_C_L_BFu0ll()
{
  {
    init_simple_test("C_L_BFu0ll");
    static STRUCT_IF_C C_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_L_BFu0ll, C_L_BFu0ll)
//============================================================================


struct  C_L_BFu0s  {
  char v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 C_L_BFu0s) C1{ Fc FL Fs:0}



static void Test_C_L_BFu0s()
{
  {
    init_simple_test("C_L_BFu0s");
    static STRUCT_IF_C C_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_L_BFu0s)");
    check_field_offset(lv, v1, 0, "C_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_L_BFu0s, C_L_BFu0s)
//============================================================================


struct  C_S_BFu0c  {
  char v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 C_S_BFu0c) C1{ Fc Fs Fc:0}



static void Test_C_S_BFu0c()
{
  {
    init_simple_test("C_S_BFu0c");
    static STRUCT_IF_C C_S_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_S_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_S_BFu0c)");
    check_field_offset(lv, v1, 0, "C_S_BFu0c.v1");
    check_field_offset(lv, v2, 2, "C_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_S_BFu0c, C_S_BFu0c)
//============================================================================


struct  C_S_BFu0i  {
  char v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 C_S_BFu0i) C1{ Fc Fs Fi:0}



static void Test_C_S_BFu0i()
{
  {
    init_simple_test("C_S_BFu0i");
    static STRUCT_IF_C C_S_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_S_BFu0i)");
    check_field_offset(lv, v1, 0, "C_S_BFu0i.v1");
    check_field_offset(lv, v2, 2, "C_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_S_BFu0i, C_S_BFu0i)
//============================================================================


struct  C_S_BFu0ll  {
  char v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 C_S_BFu0ll) C1{ Fc Fs FL:0}



static void Test_C_S_BFu0ll()
{
  {
    init_simple_test("C_S_BFu0ll");
    static STRUCT_IF_C C_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_S_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "C_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_S_BFu0ll, C_S_BFu0ll)
//============================================================================


struct  C_S_BFu0s  {
  char v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 C_S_BFu0s) C1{ Fc Fs Fs:0}



static void Test_C_S_BFu0s()
{
  {
    init_simple_test("C_S_BFu0s");
    static STRUCT_IF_C C_S_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_S_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_S_BFu0s)");
    check_field_offset(lv, v1, 0, "C_S_BFu0s.v1");
    check_field_offset(lv, v2, 2, "C_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_S_BFu0s, C_S_BFu0s)
//============================================================================


struct  C_Uc_BFu0c  {
  char v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 C_Uc_BFu0c) C1{ Fc[2] Fc:0}



static void Test_C_Uc_BFu0c()
{
  {
    init_simple_test("C_Uc_BFu0c");
    static STRUCT_IF_C C_Uc_BFu0c lv;
    check2(sizeof(lv), 2, "sizeof(C_Uc_BFu0c)");
    check2(__alignof__(lv), 1, "__alignof__(C_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "C_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 1, "C_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Uc_BFu0c, C_Uc_BFu0c)
//============================================================================


struct  C_Uc_BFu0i  {
  char v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 C_Uc_BFu0i) C1{ Fc[2] Fi:0}



static void Test_C_Uc_BFu0i()
{
  {
    init_simple_test("C_Uc_BFu0i");
    static STRUCT_IF_C C_Uc_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "C_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 1, "C_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Uc_BFu0i, C_Uc_BFu0i)
//============================================================================


struct  C_Uc_BFu0ll  {
  char v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 C_Uc_BFu0ll) C1{ Fc[2] FL:0}



static void Test_C_Uc_BFu0ll()
{
  {
    init_simple_test("C_Uc_BFu0ll");
    static STRUCT_IF_C C_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 1, "C_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Uc_BFu0ll, C_Uc_BFu0ll)
//============================================================================


struct  C_Uc_BFu0s  {
  char v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 C_Uc_BFu0s) C1{ Fc[2] Fs:0}



static void Test_C_Uc_BFu0s()
{
  {
    init_simple_test("C_Uc_BFu0s");
    static STRUCT_IF_C C_Uc_BFu0s lv;
    check2(sizeof(lv), 2, "sizeof(C_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(1,1), "__alignof__(C_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "C_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 1, "C_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Uc_BFu0s, C_Uc_BFu0s)
//============================================================================


struct  C_Ui_BFu0c  {
  char v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 C_Ui_BFu0c) C1{ Fc Fi Fc:0}



static void Test_C_Ui_BFu0c()
{
  {
    init_simple_test("C_Ui_BFu0c");
    static STRUCT_IF_C C_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(C_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(C_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "C_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "C_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ui_BFu0c, C_Ui_BFu0c)
//============================================================================


struct  C_Ui_BFu0i  {
  char v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 C_Ui_BFu0i) C1{ Fc Fi Fi:0}



static void Test_C_Ui_BFu0i()
{
  {
    init_simple_test("C_Ui_BFu0i");
    static STRUCT_IF_C C_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(C_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(C_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "C_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "C_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ui_BFu0i, C_Ui_BFu0i)
//============================================================================


struct  C_Ui_BFu0ll  {
  char v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 C_Ui_BFu0ll) C1{ Fc Fi FL:0}



static void Test_C_Ui_BFu0ll()
{
  {
    init_simple_test("C_Ui_BFu0ll");
    static STRUCT_IF_C C_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(C_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(C_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "C_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ui_BFu0ll, C_Ui_BFu0ll)
//============================================================================


struct  C_Ui_BFu0s  {
  char v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 C_Ui_BFu0s) C1{ Fc Fi Fs:0}



static void Test_C_Ui_BFu0s()
{
  {
    init_simple_test("C_Ui_BFu0s");
    static STRUCT_IF_C C_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(C_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(C_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "C_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "C_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ui_BFu0s, C_Ui_BFu0s)
//============================================================================


struct  C_Ul_BFu0c  {
  char v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 C_Ul_BFu0c) C1{ Fc FL Fc:0}



static void Test_C_Ul_BFu0c()
{
  {
    init_simple_test("C_Ul_BFu0c");
    static STRUCT_IF_C C_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "C_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ul_BFu0c, C_Ul_BFu0c)
//============================================================================


struct  C_Ul_BFu0i  {
  char v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 C_Ul_BFu0i) C1{ Fc FL Fi:0}



static void Test_C_Ul_BFu0i()
{
  {
    init_simple_test("C_Ul_BFu0i");
    static STRUCT_IF_C C_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "C_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ul_BFu0i, C_Ul_BFu0i)
//============================================================================


struct  C_Ul_BFu0ll  {
  char v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 C_Ul_BFu0ll) C1{ Fc FL FL:0}



static void Test_C_Ul_BFu0ll()
{
  {
    init_simple_test("C_Ul_BFu0ll");
    static STRUCT_IF_C C_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ul_BFu0ll, C_Ul_BFu0ll)
//============================================================================


struct  C_Ul_BFu0s  {
  char v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 C_Ul_BFu0s) C1{ Fc FL Fs:0}



static void Test_C_Ul_BFu0s()
{
  {
    init_simple_test("C_Ul_BFu0s");
    static STRUCT_IF_C C_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(C_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "C_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Ul_BFu0s, C_Ul_BFu0s)
//============================================================================


struct  C_Us_BFu0c  {
  char v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 C_Us_BFu0c) C1{ Fc Fs Fc:0}



static void Test_C_Us_BFu0c()
{
  {
    init_simple_test("C_Us_BFu0c");
    static STRUCT_IF_C C_Us_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(C_Us_BFu0c)");
    check2(__alignof__(lv), 2, "__alignof__(C_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "C_Us_BFu0c.v1");
    check_field_offset(lv, v2, 2, "C_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Us_BFu0c, C_Us_BFu0c)
//============================================================================


struct  C_Us_BFu0i  {
  char v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 C_Us_BFu0i) C1{ Fc Fs Fi:0}



static void Test_C_Us_BFu0i()
{
  {
    init_simple_test("C_Us_BFu0i");
    static STRUCT_IF_C C_Us_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(C_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "C_Us_BFu0i.v1");
    check_field_offset(lv, v2, 2, "C_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Us_BFu0i, C_Us_BFu0i)
//============================================================================


struct  C_Us_BFu0ll  {
  char v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 C_Us_BFu0ll) C1{ Fc Fs FL:0}



static void Test_C_Us_BFu0ll()
{
  {
    init_simple_test("C_Us_BFu0ll");
    static STRUCT_IF_C C_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(C_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(2,2), "__alignof__(C_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 2, "C_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Us_BFu0ll, C_Us_BFu0ll)
//============================================================================


struct  C_Us_BFu0s  {
  char v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 C_Us_BFu0s) C1{ Fc Fs Fs:0}



static void Test_C_Us_BFu0s()
{
  {
    init_simple_test("C_Us_BFu0s");
    static STRUCT_IF_C C_Us_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(C_Us_BFu0s)");
    check2(__alignof__(lv), 2, "__alignof__(C_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "C_Us_BFu0s.v1");
    check_field_offset(lv, v2, 2, "C_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Us_BFu0s, C_Us_BFu0s)
//============================================================================


struct  C_Vp_BFu0c  {
  char v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 C_Vp_BFu0c) C1{ Fc Fp Fc:0}



static void Test_C_Vp_BFu0c()
{
  {
    init_simple_test("C_Vp_BFu0c");
    static STRUCT_IF_C C_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "C_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Vp_BFu0c, C_Vp_BFu0c)
//============================================================================


struct  C_Vp_BFu0i  {
  char v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 C_Vp_BFu0i) C1{ Fc Fp Fi:0}



static void Test_C_Vp_BFu0i()
{
  {
    init_simple_test("C_Vp_BFu0i");
    static STRUCT_IF_C C_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "C_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Vp_BFu0i, C_Vp_BFu0i)
//============================================================================


struct  C_Vp_BFu0ll  {
  char v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 C_Vp_BFu0ll) C1{ Fc Fp FL:0}



static void Test_C_Vp_BFu0ll()
{
  {
    init_simple_test("C_Vp_BFu0ll");
    static STRUCT_IF_C C_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "C_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Vp_BFu0ll, C_Vp_BFu0ll)
//============================================================================


struct  C_Vp_BFu0s  {
  char v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 C_Vp_BFu0s) C1{ Fc Fp Fs:0}



static void Test_C_Vp_BFu0s()
{
  {
    init_simple_test("C_Vp_BFu0s");
    static STRUCT_IF_C C_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(C_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(C_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "C_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "C_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_C_Vp_BFu0s, C_Vp_BFu0s)
//============================================================================


struct  D_BFu0c  {
  double v1;
  unsigned char  :0;
};
//SIG(1 D_BFu0c) C1{ FL Fc:0}



static void Test_D_BFu0c()
{
  {
    init_simple_test("D_BFu0c");
    static STRUCT_IF_C D_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c, D_BFu0c)
//============================================================================


struct  D_BFu0c_BFu0c  {
  double v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 D_BFu0c_BFu0c) C1{ FL Fc:0 Fc:0}



static void Test_D_BFu0c_BFu0c()
{
  {
    init_simple_test("D_BFu0c_BFu0c");
    static STRUCT_IF_C D_BFu0c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu0c, D_BFu0c_BFu0c)
//============================================================================


struct  D_BFu0c_BFu0i  {
  double v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 D_BFu0c_BFu0i) C1{ FL Fc:0 Fi:0}



static void Test_D_BFu0c_BFu0i()
{
  {
    init_simple_test("D_BFu0c_BFu0i");
    static STRUCT_IF_C D_BFu0c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu0i, D_BFu0c_BFu0i)
//============================================================================


struct  D_BFu0c_BFu0ll  {
  double v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 D_BFu0c_BFu0ll) C1{ FL Fc:0 FL:0}



static void Test_D_BFu0c_BFu0ll()
{
  {
    init_simple_test("D_BFu0c_BFu0ll");
    static STRUCT_IF_C D_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu0ll, D_BFu0c_BFu0ll)
//============================================================================


struct  D_BFu0c_BFu0s  {
  double v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 D_BFu0c_BFu0s) C1{ FL Fc:0 Fs:0}



static void Test_D_BFu0c_BFu0s()
{
  {
    init_simple_test("D_BFu0c_BFu0s");
    static STRUCT_IF_C D_BFu0c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu0s, D_BFu0c_BFu0s)
//============================================================================


struct  D_BFu0c_BFu15i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 D_BFu0c_BFu15i) C1{ FL Fc:0 Fi:15}



static void Test_D_BFu0c_BFu15i()
{
  {
    init_simple_test("D_BFu0c_BFu15i");
    static STRUCT_IF_C D_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu15i, D_BFu0c_BFu15i)
//============================================================================


struct  D_BFu0c_BFu15ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 D_BFu0c_BFu15ll) C1{ FL Fc:0 FL:15}



static void Test_D_BFu0c_BFu15ll()
{
  {
    init_simple_test("D_BFu0c_BFu15ll");
    static STRUCT_IF_C D_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu15ll, D_BFu0c_BFu15ll)
//============================================================================


struct  D_BFu0c_BFu15s  {
  double v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 D_BFu0c_BFu15s) C1{ FL Fc:0 Fs:15}



static void Test_D_BFu0c_BFu15s()
{
  {
    init_simple_test("D_BFu0c_BFu15s");
    static STRUCT_IF_C D_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu15s, D_BFu0c_BFu15s)
//============================================================================


struct  D_BFu0c_BFu16i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 D_BFu0c_BFu16i) C1{ FL Fc:0 Fi:16}



static void Test_D_BFu0c_BFu16i()
{
  {
    init_simple_test("D_BFu0c_BFu16i");
    static STRUCT_IF_C D_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu16i, D_BFu0c_BFu16i)
//============================================================================


struct  D_BFu0c_BFu16ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 D_BFu0c_BFu16ll) C1{ FL Fc:0 FL:16}



static void Test_D_BFu0c_BFu16ll()
{
  {
    init_simple_test("D_BFu0c_BFu16ll");
    static STRUCT_IF_C D_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu16ll, D_BFu0c_BFu16ll)
//============================================================================


struct  D_BFu0c_BFu16s  {
  double v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 D_BFu0c_BFu16s) C1{ FL Fc:0 Fs:16}



static void Test_D_BFu0c_BFu16s()
{
  {
    init_simple_test("D_BFu0c_BFu16s");
    static STRUCT_IF_C D_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu16s, D_BFu0c_BFu16s)
//============================================================================


struct  D_BFu0c_BFu17i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 D_BFu0c_BFu17i) C1{ FL Fc:0 Fi:17}



static void Test_D_BFu0c_BFu17i()
{
  {
    init_simple_test("D_BFu0c_BFu17i");
    static STRUCT_IF_C D_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu17i, D_BFu0c_BFu17i)
//============================================================================


struct  D_BFu0c_BFu17ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 D_BFu0c_BFu17ll) C1{ FL Fc:0 FL:17}



static void Test_D_BFu0c_BFu17ll()
{
  {
    init_simple_test("D_BFu0c_BFu17ll");
    static STRUCT_IF_C D_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu17ll, D_BFu0c_BFu17ll)
//============================================================================


struct  D_BFu0c_BFu1c  {
  double v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 D_BFu0c_BFu1c) C1{ FL Fc:0 Fc:1}



static void Test_D_BFu0c_BFu1c()
{
  {
    init_simple_test("D_BFu0c_BFu1c");
    static STRUCT_IF_C D_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu1c, D_BFu0c_BFu1c)
//============================================================================


struct  D_BFu0c_BFu1i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 D_BFu0c_BFu1i) C1{ FL Fc:0 Fi:1}



static void Test_D_BFu0c_BFu1i()
{
  {
    init_simple_test("D_BFu0c_BFu1i");
    static STRUCT_IF_C D_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu1i, D_BFu0c_BFu1i)
//============================================================================


struct  D_BFu0c_BFu1ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 D_BFu0c_BFu1ll) C1{ FL Fc:0 FL:1}



static void Test_D_BFu0c_BFu1ll()
{
  {
    init_simple_test("D_BFu0c_BFu1ll");
    static STRUCT_IF_C D_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu1ll, D_BFu0c_BFu1ll)
//============================================================================


struct  D_BFu0c_BFu1s  {
  double v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 D_BFu0c_BFu1s) C1{ FL Fc:0 Fs:1}



static void Test_D_BFu0c_BFu1s()
{
  {
    init_simple_test("D_BFu0c_BFu1s");
    static STRUCT_IF_C D_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu1s, D_BFu0c_BFu1s)
//============================================================================


struct  D_BFu0c_BFu31i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 D_BFu0c_BFu31i) C1{ FL Fc:0 Fi:31}



static void Test_D_BFu0c_BFu31i()
{
  {
    init_simple_test("D_BFu0c_BFu31i");
    static STRUCT_IF_C D_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu31i, D_BFu0c_BFu31i)
//============================================================================


struct  D_BFu0c_BFu31ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 D_BFu0c_BFu31ll) C1{ FL Fc:0 FL:31}



static void Test_D_BFu0c_BFu31ll()
{
  {
    init_simple_test("D_BFu0c_BFu31ll");
    static STRUCT_IF_C D_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu31ll, D_BFu0c_BFu31ll)
//============================================================================


struct  D_BFu0c_BFu32i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 D_BFu0c_BFu32i) C1{ FL Fc:0 Fi:32}



static void Test_D_BFu0c_BFu32i()
{
  {
    init_simple_test("D_BFu0c_BFu32i");
    static STRUCT_IF_C D_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu32i, D_BFu0c_BFu32i)
//============================================================================


struct  D_BFu0c_BFu32ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 D_BFu0c_BFu32ll) C1{ FL Fc:0 FL:32}



static void Test_D_BFu0c_BFu32ll()
{
  {
    init_simple_test("D_BFu0c_BFu32ll");
    static STRUCT_IF_C D_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu32ll, D_BFu0c_BFu32ll)
//============================================================================


struct  D_BFu0c_BFu33  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 D_BFu0c_BFu33) C1{ FL Fc:0 FL:33}



static void Test_D_BFu0c_BFu33()
{
  {
    init_simple_test("D_BFu0c_BFu33");
    static STRUCT_IF_C D_BFu0c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu33, D_BFu0c_BFu33)
//============================================================================


struct  D_BFu0c_BFu7c  {
  double v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 D_BFu0c_BFu7c) C1{ FL Fc:0 Fc:7}



static void Test_D_BFu0c_BFu7c()
{
  {
    init_simple_test("D_BFu0c_BFu7c");
    static STRUCT_IF_C D_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu7c, D_BFu0c_BFu7c)
//============================================================================


struct  D_BFu0c_BFu7i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 D_BFu0c_BFu7i) C1{ FL Fc:0 Fi:7}



static void Test_D_BFu0c_BFu7i()
{
  {
    init_simple_test("D_BFu0c_BFu7i");
    static STRUCT_IF_C D_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu7i, D_BFu0c_BFu7i)
//============================================================================


struct  D_BFu0c_BFu7ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 D_BFu0c_BFu7ll) C1{ FL Fc:0 FL:7}



static void Test_D_BFu0c_BFu7ll()
{
  {
    init_simple_test("D_BFu0c_BFu7ll");
    static STRUCT_IF_C D_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu7ll, D_BFu0c_BFu7ll)
//============================================================================


struct  D_BFu0c_BFu7s  {
  double v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 D_BFu0c_BFu7s) C1{ FL Fc:0 Fs:7}



static void Test_D_BFu0c_BFu7s()
{
  {
    init_simple_test("D_BFu0c_BFu7s");
    static STRUCT_IF_C D_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu7s, D_BFu0c_BFu7s)
//============================================================================


struct  D_BFu0c_BFu8c  {
  double v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 D_BFu0c_BFu8c) C1{ FL Fc:0 Fc:8}



static void Test_D_BFu0c_BFu8c()
{
  {
    init_simple_test("D_BFu0c_BFu8c");
    static STRUCT_IF_C D_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu8c, D_BFu0c_BFu8c)
//============================================================================


struct  D_BFu0c_BFu8i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 D_BFu0c_BFu8i) C1{ FL Fc:0 Fi:8}



static void Test_D_BFu0c_BFu8i()
{
  {
    init_simple_test("D_BFu0c_BFu8i");
    static STRUCT_IF_C D_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu8i, D_BFu0c_BFu8i)
//============================================================================


struct  D_BFu0c_BFu8ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 D_BFu0c_BFu8ll) C1{ FL Fc:0 FL:8}



static void Test_D_BFu0c_BFu8ll()
{
  {
    init_simple_test("D_BFu0c_BFu8ll");
    static STRUCT_IF_C D_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu8ll, D_BFu0c_BFu8ll)
//============================================================================


struct  D_BFu0c_BFu8s  {
  double v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 D_BFu0c_BFu8s) C1{ FL Fc:0 Fs:8}



static void Test_D_BFu0c_BFu8s()
{
  {
    init_simple_test("D_BFu0c_BFu8s");
    static STRUCT_IF_C D_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu8s, D_BFu0c_BFu8s)
//============================================================================


struct  D_BFu0c_BFu9i  {
  double v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 D_BFu0c_BFu9i) C1{ FL Fc:0 Fi:9}



static void Test_D_BFu0c_BFu9i()
{
  {
    init_simple_test("D_BFu0c_BFu9i");
    static STRUCT_IF_C D_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu9i, D_BFu0c_BFu9i)
//============================================================================


struct  D_BFu0c_BFu9ll  {
  double v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 D_BFu0c_BFu9ll) C1{ FL Fc:0 FL:9}



static void Test_D_BFu0c_BFu9ll()
{
  {
    init_simple_test("D_BFu0c_BFu9ll");
    static STRUCT_IF_C D_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu9ll, D_BFu0c_BFu9ll)
//============================================================================


struct  D_BFu0c_BFu9s  {
  double v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 D_BFu0c_BFu9s) C1{ FL Fc:0 Fs:9}



static void Test_D_BFu0c_BFu9s()
{
  {
    init_simple_test("D_BFu0c_BFu9s");
    static STRUCT_IF_C D_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "D_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_BFu9s, D_BFu0c_BFu9s)
//============================================================================


struct  D_BFu0c_C  {
  double v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 D_BFu0c_C) C1{ FL Fc:0 Fc}



static void Test_D_BFu0c_C()
{
  {
    init_simple_test("D_BFu0c_C");
    static STRUCT_IF_C D_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_C)");
    check_field_offset(lv, v1, 0, "D_BFu0c_C.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_C, D_BFu0c_C)
//============================================================================


struct  D_BFu0c_D  {
  double v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 D_BFu0c_D) C1{ FL Fc:0 FL}



static void Test_D_BFu0c_D()
{
  {
    init_simple_test("D_BFu0c_D");
    static STRUCT_IF_C D_BFu0c_D lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_D)");
    check_field_offset(lv, v1, 0, "D_BFu0c_D.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_D, D_BFu0c_D)
//============================================================================


struct  D_BFu0c_F  {
  double v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 D_BFu0c_F) C1{ FL Fc:0 Fi}



static void Test_D_BFu0c_F()
{
  {
    init_simple_test("D_BFu0c_F");
    static STRUCT_IF_C D_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_F)");
    check_field_offset(lv, v1, 0, "D_BFu0c_F.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_F, D_BFu0c_F)
//============================================================================


struct  D_BFu0c_I  {
  double v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 D_BFu0c_I) C1{ FL Fc:0 Fi}



static void Test_D_BFu0c_I()
{
  {
    init_simple_test("D_BFu0c_I");
    static STRUCT_IF_C D_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_I)");
    check_field_offset(lv, v1, 0, "D_BFu0c_I.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_I, D_BFu0c_I)
//============================================================================


struct  D_BFu0c_Ip  {
  double v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 D_BFu0c_Ip) C1{ FL Fc:0 Fp}



static void Test_D_BFu0c_Ip()
{
  {
    init_simple_test("D_BFu0c_Ip");
    static STRUCT_IF_C D_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "D_BFu0c_Ip.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_Ip, D_BFu0c_Ip)
//============================================================================


struct  D_BFu0c_L  {
  double v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 D_BFu0c_L) C1{ FL Fc:0 FL}



static void Test_D_BFu0c_L()
{
  {
    init_simple_test("D_BFu0c_L");
    static STRUCT_IF_C D_BFu0c_L lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_L)");
    check_field_offset(lv, v1, 0, "D_BFu0c_L.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_L, D_BFu0c_L)
//============================================================================


struct  D_BFu0c_S  {
  double v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 D_BFu0c_S) C1{ FL Fc:0 Fs}



static void Test_D_BFu0c_S()
{
  {
    init_simple_test("D_BFu0c_S");
    static STRUCT_IF_C D_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_S)");
    check_field_offset(lv, v1, 0, "D_BFu0c_S.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_S, D_BFu0c_S)
//============================================================================


struct  D_BFu0c_Uc  {
  double v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 D_BFu0c_Uc) C1{ FL Fc:0 Fc}



static void Test_D_BFu0c_Uc()
{
  {
    init_simple_test("D_BFu0c_Uc");
    static STRUCT_IF_C D_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "D_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_Uc, D_BFu0c_Uc)
//============================================================================


struct  D_BFu0c_Ui  {
  double v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 D_BFu0c_Ui) C1{ FL Fc:0 Fi}



static void Test_D_BFu0c_Ui()
{
  {
    init_simple_test("D_BFu0c_Ui");
    static STRUCT_IF_C D_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "D_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_Ui, D_BFu0c_Ui)
//============================================================================


struct  D_BFu0c_Ul  {
  double v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 D_BFu0c_Ul) C1{ FL Fc:0 FL}



static void Test_D_BFu0c_Ul()
{
  {
    init_simple_test("D_BFu0c_Ul");
    static STRUCT_IF_C D_BFu0c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "D_BFu0c_Ul.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_Ul, D_BFu0c_Ul)
//============================================================================


struct  D_BFu0c_Us  {
  double v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 D_BFu0c_Us) C1{ FL Fc:0 Fs}



static void Test_D_BFu0c_Us()
{
  {
    init_simple_test("D_BFu0c_Us");
    static STRUCT_IF_C D_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "D_BFu0c_Us.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_Us, D_BFu0c_Us)
//============================================================================


struct  D_BFu0c_Vp  {
  double v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 D_BFu0c_Vp) C1{ FL Fc:0 Fp}



static void Test_D_BFu0c_Vp()
{
  {
    init_simple_test("D_BFu0c_Vp");
    static STRUCT_IF_C D_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "D_BFu0c_Vp.v1");
    check_field_offset(lv, v2, 8, "D_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0c_Vp, D_BFu0c_Vp)
//============================================================================


struct  D_BFu0i  {
  double v1;
  unsigned int  :0;
};
//SIG(1 D_BFu0i) C1{ FL Fi:0}



static void Test_D_BFu0i()
{
  {
    init_simple_test("D_BFu0i");
    static STRUCT_IF_C D_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i, D_BFu0i)
//============================================================================


struct  D_BFu0i_BFu0c  {
  double v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 D_BFu0i_BFu0c) C1{ FL Fi:0 Fc:0}



static void Test_D_BFu0i_BFu0c()
{
  {
    init_simple_test("D_BFu0i_BFu0c");
    static STRUCT_IF_C D_BFu0i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu0c, D_BFu0i_BFu0c)
//============================================================================


struct  D_BFu0i_BFu0i  {
  double v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 D_BFu0i_BFu0i) C1{ FL Fi:0 Fi:0}



static void Test_D_BFu0i_BFu0i()
{
  {
    init_simple_test("D_BFu0i_BFu0i");
    static STRUCT_IF_C D_BFu0i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu0i, D_BFu0i_BFu0i)
//============================================================================


struct  D_BFu0i_BFu0ll  {
  double v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 D_BFu0i_BFu0ll) C1{ FL Fi:0 FL:0}



static void Test_D_BFu0i_BFu0ll()
{
  {
    init_simple_test("D_BFu0i_BFu0ll");
    static STRUCT_IF_C D_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu0ll, D_BFu0i_BFu0ll)
//============================================================================


struct  D_BFu0i_BFu0s  {
  double v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 D_BFu0i_BFu0s) C1{ FL Fi:0 Fs:0}



static void Test_D_BFu0i_BFu0s()
{
  {
    init_simple_test("D_BFu0i_BFu0s");
    static STRUCT_IF_C D_BFu0i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu0s, D_BFu0i_BFu0s)
//============================================================================


struct  D_BFu0i_BFu15i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 D_BFu0i_BFu15i) C1{ FL Fi:0 Fi:15}



static void Test_D_BFu0i_BFu15i()
{
  {
    init_simple_test("D_BFu0i_BFu15i");
    static STRUCT_IF_C D_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu15i, D_BFu0i_BFu15i)
//============================================================================


struct  D_BFu0i_BFu15ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 D_BFu0i_BFu15ll) C1{ FL Fi:0 FL:15}



static void Test_D_BFu0i_BFu15ll()
{
  {
    init_simple_test("D_BFu0i_BFu15ll");
    static STRUCT_IF_C D_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu15ll, D_BFu0i_BFu15ll)
//============================================================================


struct  D_BFu0i_BFu15s  {
  double v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 D_BFu0i_BFu15s) C1{ FL Fi:0 Fs:15}



static void Test_D_BFu0i_BFu15s()
{
  {
    init_simple_test("D_BFu0i_BFu15s");
    static STRUCT_IF_C D_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu15s, D_BFu0i_BFu15s)
//============================================================================


struct  D_BFu0i_BFu16i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 D_BFu0i_BFu16i) C1{ FL Fi:0 Fi:16}



static void Test_D_BFu0i_BFu16i()
{
  {
    init_simple_test("D_BFu0i_BFu16i");
    static STRUCT_IF_C D_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu16i, D_BFu0i_BFu16i)
//============================================================================


struct  D_BFu0i_BFu16ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 D_BFu0i_BFu16ll) C1{ FL Fi:0 FL:16}



static void Test_D_BFu0i_BFu16ll()
{
  {
    init_simple_test("D_BFu0i_BFu16ll");
    static STRUCT_IF_C D_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu16ll, D_BFu0i_BFu16ll)
//============================================================================


struct  D_BFu0i_BFu16s  {
  double v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 D_BFu0i_BFu16s) C1{ FL Fi:0 Fs:16}



static void Test_D_BFu0i_BFu16s()
{
  {
    init_simple_test("D_BFu0i_BFu16s");
    static STRUCT_IF_C D_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu16s, D_BFu0i_BFu16s)
//============================================================================


struct  D_BFu0i_BFu17i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 D_BFu0i_BFu17i) C1{ FL Fi:0 Fi:17}



static void Test_D_BFu0i_BFu17i()
{
  {
    init_simple_test("D_BFu0i_BFu17i");
    static STRUCT_IF_C D_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu17i, D_BFu0i_BFu17i)
//============================================================================


struct  D_BFu0i_BFu17ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 D_BFu0i_BFu17ll) C1{ FL Fi:0 FL:17}



static void Test_D_BFu0i_BFu17ll()
{
  {
    init_simple_test("D_BFu0i_BFu17ll");
    static STRUCT_IF_C D_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu17ll, D_BFu0i_BFu17ll)
//============================================================================


struct  D_BFu0i_BFu1c  {
  double v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 D_BFu0i_BFu1c) C1{ FL Fi:0 Fc:1}



static void Test_D_BFu0i_BFu1c()
{
  {
    init_simple_test("D_BFu0i_BFu1c");
    static STRUCT_IF_C D_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu1c, D_BFu0i_BFu1c)
//============================================================================


struct  D_BFu0i_BFu1i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 D_BFu0i_BFu1i) C1{ FL Fi:0 Fi:1}



static void Test_D_BFu0i_BFu1i()
{
  {
    init_simple_test("D_BFu0i_BFu1i");
    static STRUCT_IF_C D_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu1i, D_BFu0i_BFu1i)
//============================================================================


struct  D_BFu0i_BFu1ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 D_BFu0i_BFu1ll) C1{ FL Fi:0 FL:1}



static void Test_D_BFu0i_BFu1ll()
{
  {
    init_simple_test("D_BFu0i_BFu1ll");
    static STRUCT_IF_C D_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu1ll, D_BFu0i_BFu1ll)
//============================================================================


struct  D_BFu0i_BFu1s  {
  double v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 D_BFu0i_BFu1s) C1{ FL Fi:0 Fs:1}



static void Test_D_BFu0i_BFu1s()
{
  {
    init_simple_test("D_BFu0i_BFu1s");
    static STRUCT_IF_C D_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu1s, D_BFu0i_BFu1s)
//============================================================================


struct  D_BFu0i_BFu31i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 D_BFu0i_BFu31i) C1{ FL Fi:0 Fi:31}



static void Test_D_BFu0i_BFu31i()
{
  {
    init_simple_test("D_BFu0i_BFu31i");
    static STRUCT_IF_C D_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu31i, D_BFu0i_BFu31i)
//============================================================================


struct  D_BFu0i_BFu31ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 D_BFu0i_BFu31ll) C1{ FL Fi:0 FL:31}



static void Test_D_BFu0i_BFu31ll()
{
  {
    init_simple_test("D_BFu0i_BFu31ll");
    static STRUCT_IF_C D_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu31ll, D_BFu0i_BFu31ll)
//============================================================================


struct  D_BFu0i_BFu32i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 D_BFu0i_BFu32i) C1{ FL Fi:0 Fi:32}



static void Test_D_BFu0i_BFu32i()
{
  {
    init_simple_test("D_BFu0i_BFu32i");
    static STRUCT_IF_C D_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu32i, D_BFu0i_BFu32i)
//============================================================================


struct  D_BFu0i_BFu32ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 D_BFu0i_BFu32ll) C1{ FL Fi:0 FL:32}



static void Test_D_BFu0i_BFu32ll()
{
  {
    init_simple_test("D_BFu0i_BFu32ll");
    static STRUCT_IF_C D_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu32ll, D_BFu0i_BFu32ll)
//============================================================================


struct  D_BFu0i_BFu33  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 D_BFu0i_BFu33) C1{ FL Fi:0 FL:33}



static void Test_D_BFu0i_BFu33()
{
  {
    init_simple_test("D_BFu0i_BFu33");
    static STRUCT_IF_C D_BFu0i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu0i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu33, D_BFu0i_BFu33)
//============================================================================


struct  D_BFu0i_BFu7c  {
  double v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 D_BFu0i_BFu7c) C1{ FL Fi:0 Fc:7}



static void Test_D_BFu0i_BFu7c()
{
  {
    init_simple_test("D_BFu0i_BFu7c");
    static STRUCT_IF_C D_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu7c, D_BFu0i_BFu7c)
//============================================================================


struct  D_BFu0i_BFu7i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 D_BFu0i_BFu7i) C1{ FL Fi:0 Fi:7}



static void Test_D_BFu0i_BFu7i()
{
  {
    init_simple_test("D_BFu0i_BFu7i");
    static STRUCT_IF_C D_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu7i, D_BFu0i_BFu7i)
//============================================================================


struct  D_BFu0i_BFu7ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 D_BFu0i_BFu7ll) C1{ FL Fi:0 FL:7}



static void Test_D_BFu0i_BFu7ll()
{
  {
    init_simple_test("D_BFu0i_BFu7ll");
    static STRUCT_IF_C D_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu7ll, D_BFu0i_BFu7ll)
//============================================================================


struct  D_BFu0i_BFu7s  {
  double v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 D_BFu0i_BFu7s) C1{ FL Fi:0 Fs:7}



static void Test_D_BFu0i_BFu7s()
{
  {
    init_simple_test("D_BFu0i_BFu7s");
    static STRUCT_IF_C D_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu7s, D_BFu0i_BFu7s)
//============================================================================


struct  D_BFu0i_BFu8c  {
  double v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 D_BFu0i_BFu8c) C1{ FL Fi:0 Fc:8}



static void Test_D_BFu0i_BFu8c()
{
  {
    init_simple_test("D_BFu0i_BFu8c");
    static STRUCT_IF_C D_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu8c, D_BFu0i_BFu8c)
//============================================================================


struct  D_BFu0i_BFu8i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 D_BFu0i_BFu8i) C1{ FL Fi:0 Fi:8}



static void Test_D_BFu0i_BFu8i()
{
  {
    init_simple_test("D_BFu0i_BFu8i");
    static STRUCT_IF_C D_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu8i, D_BFu0i_BFu8i)
//============================================================================


struct  D_BFu0i_BFu8ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 D_BFu0i_BFu8ll) C1{ FL Fi:0 FL:8}



static void Test_D_BFu0i_BFu8ll()
{
  {
    init_simple_test("D_BFu0i_BFu8ll");
    static STRUCT_IF_C D_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu8ll, D_BFu0i_BFu8ll)
//============================================================================


struct  D_BFu0i_BFu8s  {
  double v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 D_BFu0i_BFu8s) C1{ FL Fi:0 Fs:8}



static void Test_D_BFu0i_BFu8s()
{
  {
    init_simple_test("D_BFu0i_BFu8s");
    static STRUCT_IF_C D_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu8s, D_BFu0i_BFu8s)
//============================================================================


struct  D_BFu0i_BFu9i  {
  double v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 D_BFu0i_BFu9i) C1{ FL Fi:0 Fi:9}



static void Test_D_BFu0i_BFu9i()
{
  {
    init_simple_test("D_BFu0i_BFu9i");
    static STRUCT_IF_C D_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu9i, D_BFu0i_BFu9i)
//============================================================================


struct  D_BFu0i_BFu9ll  {
  double v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 D_BFu0i_BFu9ll) C1{ FL Fi:0 FL:9}



static void Test_D_BFu0i_BFu9ll()
{
  {
    init_simple_test("D_BFu0i_BFu9ll");
    static STRUCT_IF_C D_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu9ll, D_BFu0i_BFu9ll)
//============================================================================


struct  D_BFu0i_BFu9s  {
  double v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 D_BFu0i_BFu9s) C1{ FL Fi:0 Fs:9}



static void Test_D_BFu0i_BFu9s()
{
  {
    init_simple_test("D_BFu0i_BFu9s");
    static STRUCT_IF_C D_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "D_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_BFu9s, D_BFu0i_BFu9s)
//============================================================================


struct  D_BFu0i_C  {
  double v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 D_BFu0i_C) C1{ FL Fi:0 Fc}



static void Test_D_BFu0i_C()
{
  {
    init_simple_test("D_BFu0i_C");
    static STRUCT_IF_C D_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_C)");
    check_field_offset(lv, v1, 0, "D_BFu0i_C.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_C, D_BFu0i_C)
//============================================================================


struct  D_BFu0i_D  {
  double v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 D_BFu0i_D) C1{ FL Fi:0 FL}



static void Test_D_BFu0i_D()
{
  {
    init_simple_test("D_BFu0i_D");
    static STRUCT_IF_C D_BFu0i_D lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_D)");
    check_field_offset(lv, v1, 0, "D_BFu0i_D.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_D, D_BFu0i_D)
//============================================================================


struct  D_BFu0i_F  {
  double v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 D_BFu0i_F) C1{ FL Fi:0 Fi}



static void Test_D_BFu0i_F()
{
  {
    init_simple_test("D_BFu0i_F");
    static STRUCT_IF_C D_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_F)");
    check_field_offset(lv, v1, 0, "D_BFu0i_F.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_F, D_BFu0i_F)
//============================================================================


struct  D_BFu0i_I  {
  double v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 D_BFu0i_I) C1{ FL Fi:0 Fi}



static void Test_D_BFu0i_I()
{
  {
    init_simple_test("D_BFu0i_I");
    static STRUCT_IF_C D_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_I)");
    check_field_offset(lv, v1, 0, "D_BFu0i_I.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_I, D_BFu0i_I)
//============================================================================


struct  D_BFu0i_Ip  {
  double v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 D_BFu0i_Ip) C1{ FL Fi:0 Fp}



static void Test_D_BFu0i_Ip()
{
  {
    init_simple_test("D_BFu0i_Ip");
    static STRUCT_IF_C D_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "D_BFu0i_Ip.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_Ip, D_BFu0i_Ip)
//============================================================================


struct  D_BFu0i_L  {
  double v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 D_BFu0i_L) C1{ FL Fi:0 FL}



static void Test_D_BFu0i_L()
{
  {
    init_simple_test("D_BFu0i_L");
    static STRUCT_IF_C D_BFu0i_L lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_L)");
    check_field_offset(lv, v1, 0, "D_BFu0i_L.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_L, D_BFu0i_L)
//============================================================================


struct  D_BFu0i_S  {
  double v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 D_BFu0i_S) C1{ FL Fi:0 Fs}



static void Test_D_BFu0i_S()
{
  {
    init_simple_test("D_BFu0i_S");
    static STRUCT_IF_C D_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_S)");
    check_field_offset(lv, v1, 0, "D_BFu0i_S.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_S, D_BFu0i_S)
//============================================================================


struct  D_BFu0i_Uc  {
  double v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 D_BFu0i_Uc) C1{ FL Fi:0 Fc}



static void Test_D_BFu0i_Uc()
{
  {
    init_simple_test("D_BFu0i_Uc");
    static STRUCT_IF_C D_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "D_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_Uc, D_BFu0i_Uc)
//============================================================================


struct  D_BFu0i_Ui  {
  double v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 D_BFu0i_Ui) C1{ FL Fi:0 Fi}



static void Test_D_BFu0i_Ui()
{
  {
    init_simple_test("D_BFu0i_Ui");
    static STRUCT_IF_C D_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "D_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_Ui, D_BFu0i_Ui)
//============================================================================


struct  D_BFu0i_Ul  {
  double v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 D_BFu0i_Ul) C1{ FL Fi:0 FL}



static void Test_D_BFu0i_Ul()
{
  {
    init_simple_test("D_BFu0i_Ul");
    static STRUCT_IF_C D_BFu0i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "D_BFu0i_Ul.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_Ul, D_BFu0i_Ul)
//============================================================================


struct  D_BFu0i_Us  {
  double v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 D_BFu0i_Us) C1{ FL Fi:0 Fs}



static void Test_D_BFu0i_Us()
{
  {
    init_simple_test("D_BFu0i_Us");
    static STRUCT_IF_C D_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "D_BFu0i_Us.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_Us, D_BFu0i_Us)
//============================================================================


struct  D_BFu0i_Vp  {
  double v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 D_BFu0i_Vp) C1{ FL Fi:0 Fp}



static void Test_D_BFu0i_Vp()
{
  {
    init_simple_test("D_BFu0i_Vp");
    static STRUCT_IF_C D_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "D_BFu0i_Vp.v1");
    check_field_offset(lv, v2, 8, "D_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0i_Vp, D_BFu0i_Vp)
//============================================================================


struct  D_BFu0ll  {
  double v1;
  __tsu64  :0;
};
//SIG(1 D_BFu0ll) C1{ FL FL:0}



static void Test_D_BFu0ll()
{
  {
    init_simple_test("D_BFu0ll");
    static STRUCT_IF_C D_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll, D_BFu0ll)
//============================================================================


struct  D_BFu0ll_BFu0c  {
  double v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 D_BFu0ll_BFu0c) C1{ FL FL:0 Fc:0}



static void Test_D_BFu0ll_BFu0c()
{
  {
    init_simple_test("D_BFu0ll_BFu0c");
    static STRUCT_IF_C D_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu0c, D_BFu0ll_BFu0c)
//============================================================================


struct  D_BFu0ll_BFu0i  {
  double v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 D_BFu0ll_BFu0i) C1{ FL FL:0 Fi:0}



static void Test_D_BFu0ll_BFu0i()
{
  {
    init_simple_test("D_BFu0ll_BFu0i");
    static STRUCT_IF_C D_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu0i, D_BFu0ll_BFu0i)
//============================================================================


struct  D_BFu0ll_BFu0ll  {
  double v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 D_BFu0ll_BFu0ll) C1{ FL FL:0 FL:0}



static void Test_D_BFu0ll_BFu0ll()
{
  {
    init_simple_test("D_BFu0ll_BFu0ll");
    static STRUCT_IF_C D_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu0ll, D_BFu0ll_BFu0ll)
//============================================================================


struct  D_BFu0ll_BFu0s  {
  double v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 D_BFu0ll_BFu0s) C1{ FL FL:0 Fs:0}



static void Test_D_BFu0ll_BFu0s()
{
  {
    init_simple_test("D_BFu0ll_BFu0s");
    static STRUCT_IF_C D_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu0s, D_BFu0ll_BFu0s)
//============================================================================


struct  D_BFu0ll_BFu15i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 D_BFu0ll_BFu15i) C1{ FL FL:0 Fi:15}



static void Test_D_BFu0ll_BFu15i()
{
  {
    init_simple_test("D_BFu0ll_BFu15i");
    static STRUCT_IF_C D_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu15i, D_BFu0ll_BFu15i)
//============================================================================


struct  D_BFu0ll_BFu15ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 D_BFu0ll_BFu15ll) C1{ FL FL:0 FL:15}



static void Test_D_BFu0ll_BFu15ll()
{
  {
    init_simple_test("D_BFu0ll_BFu15ll");
    static STRUCT_IF_C D_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu15ll, D_BFu0ll_BFu15ll)
//============================================================================


struct  D_BFu0ll_BFu15s  {
  double v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 D_BFu0ll_BFu15s) C1{ FL FL:0 Fs:15}



static void Test_D_BFu0ll_BFu15s()
{
  {
    init_simple_test("D_BFu0ll_BFu15s");
    static STRUCT_IF_C D_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu15s, D_BFu0ll_BFu15s)
//============================================================================


struct  D_BFu0ll_BFu16i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 D_BFu0ll_BFu16i) C1{ FL FL:0 Fi:16}



static void Test_D_BFu0ll_BFu16i()
{
  {
    init_simple_test("D_BFu0ll_BFu16i");
    static STRUCT_IF_C D_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu16i, D_BFu0ll_BFu16i)
//============================================================================


struct  D_BFu0ll_BFu16ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 D_BFu0ll_BFu16ll) C1{ FL FL:0 FL:16}



static void Test_D_BFu0ll_BFu16ll()
{
  {
    init_simple_test("D_BFu0ll_BFu16ll");
    static STRUCT_IF_C D_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu16ll, D_BFu0ll_BFu16ll)
//============================================================================


struct  D_BFu0ll_BFu16s  {
  double v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 D_BFu0ll_BFu16s) C1{ FL FL:0 Fs:16}



static void Test_D_BFu0ll_BFu16s()
{
  {
    init_simple_test("D_BFu0ll_BFu16s");
    static STRUCT_IF_C D_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu16s, D_BFu0ll_BFu16s)
//============================================================================


struct  D_BFu0ll_BFu17i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 D_BFu0ll_BFu17i) C1{ FL FL:0 Fi:17}



static void Test_D_BFu0ll_BFu17i()
{
  {
    init_simple_test("D_BFu0ll_BFu17i");
    static STRUCT_IF_C D_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu17i, D_BFu0ll_BFu17i)
//============================================================================


struct  D_BFu0ll_BFu17ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 D_BFu0ll_BFu17ll) C1{ FL FL:0 FL:17}



static void Test_D_BFu0ll_BFu17ll()
{
  {
    init_simple_test("D_BFu0ll_BFu17ll");
    static STRUCT_IF_C D_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu17ll, D_BFu0ll_BFu17ll)
//============================================================================


struct  D_BFu0ll_BFu1c  {
  double v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 D_BFu0ll_BFu1c) C1{ FL FL:0 Fc:1}



static void Test_D_BFu0ll_BFu1c()
{
  {
    init_simple_test("D_BFu0ll_BFu1c");
    static STRUCT_IF_C D_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu1c, D_BFu0ll_BFu1c)
//============================================================================


struct  D_BFu0ll_BFu1i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 D_BFu0ll_BFu1i) C1{ FL FL:0 Fi:1}



static void Test_D_BFu0ll_BFu1i()
{
  {
    init_simple_test("D_BFu0ll_BFu1i");
    static STRUCT_IF_C D_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu1i, D_BFu0ll_BFu1i)
//============================================================================


struct  D_BFu0ll_BFu1ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 D_BFu0ll_BFu1ll) C1{ FL FL:0 FL:1}



static void Test_D_BFu0ll_BFu1ll()
{
  {
    init_simple_test("D_BFu0ll_BFu1ll");
    static STRUCT_IF_C D_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu1ll, D_BFu0ll_BFu1ll)
//============================================================================


struct  D_BFu0ll_BFu1s  {
  double v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 D_BFu0ll_BFu1s) C1{ FL FL:0 Fs:1}



static void Test_D_BFu0ll_BFu1s()
{
  {
    init_simple_test("D_BFu0ll_BFu1s");
    static STRUCT_IF_C D_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu1s, D_BFu0ll_BFu1s)
//============================================================================


struct  D_BFu0ll_BFu31i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 D_BFu0ll_BFu31i) C1{ FL FL:0 Fi:31}



static void Test_D_BFu0ll_BFu31i()
{
  {
    init_simple_test("D_BFu0ll_BFu31i");
    static STRUCT_IF_C D_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu31i, D_BFu0ll_BFu31i)
//============================================================================


struct  D_BFu0ll_BFu31ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 D_BFu0ll_BFu31ll) C1{ FL FL:0 FL:31}



static void Test_D_BFu0ll_BFu31ll()
{
  {
    init_simple_test("D_BFu0ll_BFu31ll");
    static STRUCT_IF_C D_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu31ll, D_BFu0ll_BFu31ll)
//============================================================================


struct  D_BFu0ll_BFu32i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 D_BFu0ll_BFu32i) C1{ FL FL:0 Fi:32}



static void Test_D_BFu0ll_BFu32i()
{
  {
    init_simple_test("D_BFu0ll_BFu32i");
    static STRUCT_IF_C D_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu32i, D_BFu0ll_BFu32i)
//============================================================================


struct  D_BFu0ll_BFu32ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 D_BFu0ll_BFu32ll) C1{ FL FL:0 FL:32}



static void Test_D_BFu0ll_BFu32ll()
{
  {
    init_simple_test("D_BFu0ll_BFu32ll");
    static STRUCT_IF_C D_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu32ll, D_BFu0ll_BFu32ll)
//============================================================================


struct  D_BFu0ll_BFu33  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 D_BFu0ll_BFu33) C1{ FL FL:0 FL:33}



static void Test_D_BFu0ll_BFu33()
{
  {
    init_simple_test("D_BFu0ll_BFu33");
    static STRUCT_IF_C D_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu33, D_BFu0ll_BFu33)
//============================================================================


struct  D_BFu0ll_BFu7c  {
  double v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 D_BFu0ll_BFu7c) C1{ FL FL:0 Fc:7}



static void Test_D_BFu0ll_BFu7c()
{
  {
    init_simple_test("D_BFu0ll_BFu7c");
    static STRUCT_IF_C D_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu7c, D_BFu0ll_BFu7c)
//============================================================================


struct  D_BFu0ll_BFu7i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 D_BFu0ll_BFu7i) C1{ FL FL:0 Fi:7}



static void Test_D_BFu0ll_BFu7i()
{
  {
    init_simple_test("D_BFu0ll_BFu7i");
    static STRUCT_IF_C D_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu7i, D_BFu0ll_BFu7i)
//============================================================================


struct  D_BFu0ll_BFu7ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 D_BFu0ll_BFu7ll) C1{ FL FL:0 FL:7}



static void Test_D_BFu0ll_BFu7ll()
{
  {
    init_simple_test("D_BFu0ll_BFu7ll");
    static STRUCT_IF_C D_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu7ll, D_BFu0ll_BFu7ll)
//============================================================================


struct  D_BFu0ll_BFu7s  {
  double v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 D_BFu0ll_BFu7s) C1{ FL FL:0 Fs:7}



static void Test_D_BFu0ll_BFu7s()
{
  {
    init_simple_test("D_BFu0ll_BFu7s");
    static STRUCT_IF_C D_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu7s, D_BFu0ll_BFu7s)
//============================================================================


struct  D_BFu0ll_BFu8c  {
  double v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 D_BFu0ll_BFu8c) C1{ FL FL:0 Fc:8}



static void Test_D_BFu0ll_BFu8c()
{
  {
    init_simple_test("D_BFu0ll_BFu8c");
    static STRUCT_IF_C D_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu8c, D_BFu0ll_BFu8c)
//============================================================================


struct  D_BFu0ll_BFu8i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 D_BFu0ll_BFu8i) C1{ FL FL:0 Fi:8}



static void Test_D_BFu0ll_BFu8i()
{
  {
    init_simple_test("D_BFu0ll_BFu8i");
    static STRUCT_IF_C D_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu8i, D_BFu0ll_BFu8i)
//============================================================================


struct  D_BFu0ll_BFu8ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 D_BFu0ll_BFu8ll) C1{ FL FL:0 FL:8}



static void Test_D_BFu0ll_BFu8ll()
{
  {
    init_simple_test("D_BFu0ll_BFu8ll");
    static STRUCT_IF_C D_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu8ll, D_BFu0ll_BFu8ll)
//============================================================================


struct  D_BFu0ll_BFu8s  {
  double v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 D_BFu0ll_BFu8s) C1{ FL FL:0 Fs:8}



static void Test_D_BFu0ll_BFu8s()
{
  {
    init_simple_test("D_BFu0ll_BFu8s");
    static STRUCT_IF_C D_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu8s, D_BFu0ll_BFu8s)
//============================================================================


struct  D_BFu0ll_BFu9i  {
  double v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 D_BFu0ll_BFu9i) C1{ FL FL:0 Fi:9}



static void Test_D_BFu0ll_BFu9i()
{
  {
    init_simple_test("D_BFu0ll_BFu9i");
    static STRUCT_IF_C D_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu9i, D_BFu0ll_BFu9i)
//============================================================================


struct  D_BFu0ll_BFu9ll  {
  double v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 D_BFu0ll_BFu9ll) C1{ FL FL:0 FL:9}



static void Test_D_BFu0ll_BFu9ll()
{
  {
    init_simple_test("D_BFu0ll_BFu9ll");
    static STRUCT_IF_C D_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu9ll, D_BFu0ll_BFu9ll)
//============================================================================


struct  D_BFu0ll_BFu9s  {
  double v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 D_BFu0ll_BFu9s) C1{ FL FL:0 Fs:9}



static void Test_D_BFu0ll_BFu9s()
{
  {
    init_simple_test("D_BFu0ll_BFu9s");
    static STRUCT_IF_C D_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_BFu9s, D_BFu0ll_BFu9s)
//============================================================================


struct  D_BFu0ll_C  {
  double v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 D_BFu0ll_C) C1{ FL FL:0 Fc}



static void Test_D_BFu0ll_C()
{
  {
    init_simple_test("D_BFu0ll_C");
    static STRUCT_IF_C D_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_C.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_C, D_BFu0ll_C)
//============================================================================


struct  D_BFu0ll_D  {
  double v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 D_BFu0ll_D) C1{ FL FL:0 FL}



static void Test_D_BFu0ll_D()
{
  {
    init_simple_test("D_BFu0ll_D");
    static STRUCT_IF_C D_BFu0ll_D lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_D.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_D, D_BFu0ll_D)
//============================================================================


struct  D_BFu0ll_F  {
  double v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 D_BFu0ll_F) C1{ FL FL:0 Fi}



static void Test_D_BFu0ll_F()
{
  {
    init_simple_test("D_BFu0ll_F");
    static STRUCT_IF_C D_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_F.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_F, D_BFu0ll_F)
//============================================================================


struct  D_BFu0ll_I  {
  double v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 D_BFu0ll_I) C1{ FL FL:0 Fi}



static void Test_D_BFu0ll_I()
{
  {
    init_simple_test("D_BFu0ll_I");
    static STRUCT_IF_C D_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_I.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_I, D_BFu0ll_I)
//============================================================================


struct  D_BFu0ll_Ip  {
  double v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 D_BFu0ll_Ip) C1{ FL FL:0 Fp}



static void Test_D_BFu0ll_Ip()
{
  {
    init_simple_test("D_BFu0ll_Ip");
    static STRUCT_IF_C D_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_Ip, D_BFu0ll_Ip)
//============================================================================


struct  D_BFu0ll_L  {
  double v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 D_BFu0ll_L) C1{ FL FL:0 FL}



static void Test_D_BFu0ll_L()
{
  {
    init_simple_test("D_BFu0ll_L");
    static STRUCT_IF_C D_BFu0ll_L lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_L.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_L, D_BFu0ll_L)
//============================================================================


struct  D_BFu0ll_S  {
  double v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 D_BFu0ll_S) C1{ FL FL:0 Fs}



static void Test_D_BFu0ll_S()
{
  {
    init_simple_test("D_BFu0ll_S");
    static STRUCT_IF_C D_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_S.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_S, D_BFu0ll_S)
//============================================================================


struct  D_BFu0ll_Uc  {
  double v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 D_BFu0ll_Uc) C1{ FL FL:0 Fc}



static void Test_D_BFu0ll_Uc()
{
  {
    init_simple_test("D_BFu0ll_Uc");
    static STRUCT_IF_C D_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_Uc, D_BFu0ll_Uc)
//============================================================================


struct  D_BFu0ll_Ui  {
  double v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 D_BFu0ll_Ui) C1{ FL FL:0 Fi}



static void Test_D_BFu0ll_Ui()
{
  {
    init_simple_test("D_BFu0ll_Ui");
    static STRUCT_IF_C D_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_Ui, D_BFu0ll_Ui)
//============================================================================


struct  D_BFu0ll_Ul  {
  double v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 D_BFu0ll_Ul) C1{ FL FL:0 FL}



static void Test_D_BFu0ll_Ul()
{
  {
    init_simple_test("D_BFu0ll_Ul");
    static STRUCT_IF_C D_BFu0ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_Ul, D_BFu0ll_Ul)
//============================================================================


struct  D_BFu0ll_Us  {
  double v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 D_BFu0ll_Us) C1{ FL FL:0 Fs}



static void Test_D_BFu0ll_Us()
{
  {
    init_simple_test("D_BFu0ll_Us");
    static STRUCT_IF_C D_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_Us.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_Us, D_BFu0ll_Us)
//============================================================================


struct  D_BFu0ll_Vp  {
  double v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 D_BFu0ll_Vp) C1{ FL FL:0 Fp}



static void Test_D_BFu0ll_Vp()
{
  {
    init_simple_test("D_BFu0ll_Vp");
    static STRUCT_IF_C D_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "D_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, 8, "D_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0ll_Vp, D_BFu0ll_Vp)
//============================================================================


struct  D_BFu0s  {
  double v1;
  unsigned short  :0;
};
//SIG(1 D_BFu0s) C1{ FL Fs:0}



static void Test_D_BFu0s()
{
  {
    init_simple_test("D_BFu0s");
    static STRUCT_IF_C D_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s, D_BFu0s)
//============================================================================


struct  D_BFu0s_BFu0c  {
  double v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 D_BFu0s_BFu0c) C1{ FL Fs:0 Fc:0}



static void Test_D_BFu0s_BFu0c()
{
  {
    init_simple_test("D_BFu0s_BFu0c");
    static STRUCT_IF_C D_BFu0s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu0c, D_BFu0s_BFu0c)
//============================================================================


struct  D_BFu0s_BFu0i  {
  double v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 D_BFu0s_BFu0i) C1{ FL Fs:0 Fi:0}



static void Test_D_BFu0s_BFu0i()
{
  {
    init_simple_test("D_BFu0s_BFu0i");
    static STRUCT_IF_C D_BFu0s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu0i, D_BFu0s_BFu0i)
//============================================================================


struct  D_BFu0s_BFu0ll  {
  double v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 D_BFu0s_BFu0ll) C1{ FL Fs:0 FL:0}



static void Test_D_BFu0s_BFu0ll()
{
  {
    init_simple_test("D_BFu0s_BFu0ll");
    static STRUCT_IF_C D_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu0ll, D_BFu0s_BFu0ll)
//============================================================================


struct  D_BFu0s_BFu0s  {
  double v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 D_BFu0s_BFu0s) C1{ FL Fs:0 Fs:0}



static void Test_D_BFu0s_BFu0s()
{
  {
    init_simple_test("D_BFu0s_BFu0s");
    static STRUCT_IF_C D_BFu0s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(D_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu0s, D_BFu0s_BFu0s)
//============================================================================


struct  D_BFu0s_BFu15i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 D_BFu0s_BFu15i) C1{ FL Fs:0 Fi:15}



static void Test_D_BFu0s_BFu15i()
{
  {
    init_simple_test("D_BFu0s_BFu15i");
    static STRUCT_IF_C D_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu15i, D_BFu0s_BFu15i)
//============================================================================


struct  D_BFu0s_BFu15ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 D_BFu0s_BFu15ll) C1{ FL Fs:0 FL:15}



static void Test_D_BFu0s_BFu15ll()
{
  {
    init_simple_test("D_BFu0s_BFu15ll");
    static STRUCT_IF_C D_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu15ll, D_BFu0s_BFu15ll)
//============================================================================


struct  D_BFu0s_BFu15s  {
  double v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 D_BFu0s_BFu15s) C1{ FL Fs:0 Fs:15}



static void Test_D_BFu0s_BFu15s()
{
  {
    init_simple_test("D_BFu0s_BFu15s");
    static STRUCT_IF_C D_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu15s, D_BFu0s_BFu15s)
//============================================================================


struct  D_BFu0s_BFu16i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 D_BFu0s_BFu16i) C1{ FL Fs:0 Fi:16}



static void Test_D_BFu0s_BFu16i()
{
  {
    init_simple_test("D_BFu0s_BFu16i");
    static STRUCT_IF_C D_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu16i, D_BFu0s_BFu16i)
//============================================================================


struct  D_BFu0s_BFu16ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 D_BFu0s_BFu16ll) C1{ FL Fs:0 FL:16}



static void Test_D_BFu0s_BFu16ll()
{
  {
    init_simple_test("D_BFu0s_BFu16ll");
    static STRUCT_IF_C D_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu16ll, D_BFu0s_BFu16ll)
//============================================================================


struct  D_BFu0s_BFu16s  {
  double v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 D_BFu0s_BFu16s) C1{ FL Fs:0 Fs:16}



static void Test_D_BFu0s_BFu16s()
{
  {
    init_simple_test("D_BFu0s_BFu16s");
    static STRUCT_IF_C D_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu16s, D_BFu0s_BFu16s)
//============================================================================


struct  D_BFu0s_BFu17i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 D_BFu0s_BFu17i) C1{ FL Fs:0 Fi:17}



static void Test_D_BFu0s_BFu17i()
{
  {
    init_simple_test("D_BFu0s_BFu17i");
    static STRUCT_IF_C D_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu17i, D_BFu0s_BFu17i)
//============================================================================


struct  D_BFu0s_BFu17ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 D_BFu0s_BFu17ll) C1{ FL Fs:0 FL:17}



static void Test_D_BFu0s_BFu17ll()
{
  {
    init_simple_test("D_BFu0s_BFu17ll");
    static STRUCT_IF_C D_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu17ll, D_BFu0s_BFu17ll)
//============================================================================


struct  D_BFu0s_BFu1c  {
  double v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 D_BFu0s_BFu1c) C1{ FL Fs:0 Fc:1}



static void Test_D_BFu0s_BFu1c()
{
  {
    init_simple_test("D_BFu0s_BFu1c");
    static STRUCT_IF_C D_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu1c, D_BFu0s_BFu1c)
//============================================================================


struct  D_BFu0s_BFu1i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 D_BFu0s_BFu1i) C1{ FL Fs:0 Fi:1}



static void Test_D_BFu0s_BFu1i()
{
  {
    init_simple_test("D_BFu0s_BFu1i");
    static STRUCT_IF_C D_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu1i, D_BFu0s_BFu1i)
//============================================================================


struct  D_BFu0s_BFu1ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 D_BFu0s_BFu1ll) C1{ FL Fs:0 FL:1}



static void Test_D_BFu0s_BFu1ll()
{
  {
    init_simple_test("D_BFu0s_BFu1ll");
    static STRUCT_IF_C D_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu1ll, D_BFu0s_BFu1ll)
//============================================================================


struct  D_BFu0s_BFu1s  {
  double v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 D_BFu0s_BFu1s) C1{ FL Fs:0 Fs:1}



static void Test_D_BFu0s_BFu1s()
{
  {
    init_simple_test("D_BFu0s_BFu1s");
    static STRUCT_IF_C D_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu1s, D_BFu0s_BFu1s)
//============================================================================


struct  D_BFu0s_BFu31i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 D_BFu0s_BFu31i) C1{ FL Fs:0 Fi:31}



static void Test_D_BFu0s_BFu31i()
{
  {
    init_simple_test("D_BFu0s_BFu31i");
    static STRUCT_IF_C D_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu31i, D_BFu0s_BFu31i)
//============================================================================


struct  D_BFu0s_BFu31ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 D_BFu0s_BFu31ll) C1{ FL Fs:0 FL:31}



static void Test_D_BFu0s_BFu31ll()
{
  {
    init_simple_test("D_BFu0s_BFu31ll");
    static STRUCT_IF_C D_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu31ll, D_BFu0s_BFu31ll)
//============================================================================


struct  D_BFu0s_BFu32i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 D_BFu0s_BFu32i) C1{ FL Fs:0 Fi:32}



static void Test_D_BFu0s_BFu32i()
{
  {
    init_simple_test("D_BFu0s_BFu32i");
    static STRUCT_IF_C D_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu32i, D_BFu0s_BFu32i)
//============================================================================


struct  D_BFu0s_BFu32ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 D_BFu0s_BFu32ll) C1{ FL Fs:0 FL:32}



static void Test_D_BFu0s_BFu32ll()
{
  {
    init_simple_test("D_BFu0s_BFu32ll");
    static STRUCT_IF_C D_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu32ll, D_BFu0s_BFu32ll)
//============================================================================


struct  D_BFu0s_BFu33  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 D_BFu0s_BFu33) C1{ FL Fs:0 FL:33}



static void Test_D_BFu0s_BFu33()
{
  {
    init_simple_test("D_BFu0s_BFu33");
    static STRUCT_IF_C D_BFu0s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu33, D_BFu0s_BFu33)
//============================================================================


struct  D_BFu0s_BFu7c  {
  double v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 D_BFu0s_BFu7c) C1{ FL Fs:0 Fc:7}



static void Test_D_BFu0s_BFu7c()
{
  {
    init_simple_test("D_BFu0s_BFu7c");
    static STRUCT_IF_C D_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu7c, D_BFu0s_BFu7c)
//============================================================================


struct  D_BFu0s_BFu7i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 D_BFu0s_BFu7i) C1{ FL Fs:0 Fi:7}



static void Test_D_BFu0s_BFu7i()
{
  {
    init_simple_test("D_BFu0s_BFu7i");
    static STRUCT_IF_C D_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu7i, D_BFu0s_BFu7i)
//============================================================================


struct  D_BFu0s_BFu7ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 D_BFu0s_BFu7ll) C1{ FL Fs:0 FL:7}



static void Test_D_BFu0s_BFu7ll()
{
  {
    init_simple_test("D_BFu0s_BFu7ll");
    static STRUCT_IF_C D_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu7ll, D_BFu0s_BFu7ll)
//============================================================================


struct  D_BFu0s_BFu7s  {
  double v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 D_BFu0s_BFu7s) C1{ FL Fs:0 Fs:7}



static void Test_D_BFu0s_BFu7s()
{
  {
    init_simple_test("D_BFu0s_BFu7s");
    static STRUCT_IF_C D_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu7s, D_BFu0s_BFu7s)
//============================================================================


struct  D_BFu0s_BFu8c  {
  double v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 D_BFu0s_BFu8c) C1{ FL Fs:0 Fc:8}



static void Test_D_BFu0s_BFu8c()
{
  {
    init_simple_test("D_BFu0s_BFu8c");
    static STRUCT_IF_C D_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu8c, D_BFu0s_BFu8c)
//============================================================================


struct  D_BFu0s_BFu8i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 D_BFu0s_BFu8i) C1{ FL Fs:0 Fi:8}



static void Test_D_BFu0s_BFu8i()
{
  {
    init_simple_test("D_BFu0s_BFu8i");
    static STRUCT_IF_C D_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu8i, D_BFu0s_BFu8i)
//============================================================================


struct  D_BFu0s_BFu8ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 D_BFu0s_BFu8ll) C1{ FL Fs:0 FL:8}



static void Test_D_BFu0s_BFu8ll()
{
  {
    init_simple_test("D_BFu0s_BFu8ll");
    static STRUCT_IF_C D_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu8ll, D_BFu0s_BFu8ll)
//============================================================================


struct  D_BFu0s_BFu8s  {
  double v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 D_BFu0s_BFu8s) C1{ FL Fs:0 Fs:8}



static void Test_D_BFu0s_BFu8s()
{
  {
    init_simple_test("D_BFu0s_BFu8s");
    static STRUCT_IF_C D_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu8s, D_BFu0s_BFu8s)
//============================================================================


struct  D_BFu0s_BFu9i  {
  double v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 D_BFu0s_BFu9i) C1{ FL Fs:0 Fi:9}



static void Test_D_BFu0s_BFu9i()
{
  {
    init_simple_test("D_BFu0s_BFu9i");
    static STRUCT_IF_C D_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu9i, D_BFu0s_BFu9i)
//============================================================================


struct  D_BFu0s_BFu9ll  {
  double v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 D_BFu0s_BFu9ll) C1{ FL Fs:0 FL:9}



static void Test_D_BFu0s_BFu9ll()
{
  {
    init_simple_test("D_BFu0s_BFu9ll");
    static STRUCT_IF_C D_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu9ll, D_BFu0s_BFu9ll)
//============================================================================


struct  D_BFu0s_BFu9s  {
  double v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 D_BFu0s_BFu9s) C1{ FL Fs:0 Fs:9}



static void Test_D_BFu0s_BFu9s()
{
  {
    init_simple_test("D_BFu0s_BFu9s");
    static STRUCT_IF_C D_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "D_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_BFu9s, D_BFu0s_BFu9s)
//============================================================================


struct  D_BFu0s_C  {
  double v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 D_BFu0s_C) C1{ FL Fs:0 Fc}



static void Test_D_BFu0s_C()
{
  {
    init_simple_test("D_BFu0s_C");
    static STRUCT_IF_C D_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_C)");
    check_field_offset(lv, v1, 0, "D_BFu0s_C.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_C, D_BFu0s_C)
//============================================================================


struct  D_BFu0s_D  {
  double v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 D_BFu0s_D) C1{ FL Fs:0 FL}



static void Test_D_BFu0s_D()
{
  {
    init_simple_test("D_BFu0s_D");
    static STRUCT_IF_C D_BFu0s_D lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_D)");
    check_field_offset(lv, v1, 0, "D_BFu0s_D.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_D, D_BFu0s_D)
//============================================================================


struct  D_BFu0s_F  {
  double v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 D_BFu0s_F) C1{ FL Fs:0 Fi}



static void Test_D_BFu0s_F()
{
  {
    init_simple_test("D_BFu0s_F");
    static STRUCT_IF_C D_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_F)");
    check_field_offset(lv, v1, 0, "D_BFu0s_F.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_F, D_BFu0s_F)
//============================================================================


struct  D_BFu0s_I  {
  double v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 D_BFu0s_I) C1{ FL Fs:0 Fi}



static void Test_D_BFu0s_I()
{
  {
    init_simple_test("D_BFu0s_I");
    static STRUCT_IF_C D_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_I)");
    check_field_offset(lv, v1, 0, "D_BFu0s_I.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_I, D_BFu0s_I)
//============================================================================


struct  D_BFu0s_Ip  {
  double v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 D_BFu0s_Ip) C1{ FL Fs:0 Fp}



static void Test_D_BFu0s_Ip()
{
  {
    init_simple_test("D_BFu0s_Ip");
    static STRUCT_IF_C D_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "D_BFu0s_Ip.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_Ip, D_BFu0s_Ip)
//============================================================================


struct  D_BFu0s_L  {
  double v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 D_BFu0s_L) C1{ FL Fs:0 FL}



static void Test_D_BFu0s_L()
{
  {
    init_simple_test("D_BFu0s_L");
    static STRUCT_IF_C D_BFu0s_L lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_L)");
    check_field_offset(lv, v1, 0, "D_BFu0s_L.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_L, D_BFu0s_L)
//============================================================================


struct  D_BFu0s_S  {
  double v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 D_BFu0s_S) C1{ FL Fs:0 Fs}



static void Test_D_BFu0s_S()
{
  {
    init_simple_test("D_BFu0s_S");
    static STRUCT_IF_C D_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_S)");
    check_field_offset(lv, v1, 0, "D_BFu0s_S.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_S, D_BFu0s_S)
//============================================================================


struct  D_BFu0s_Uc  {
  double v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 D_BFu0s_Uc) C1{ FL Fs:0 Fc}



static void Test_D_BFu0s_Uc()
{
  {
    init_simple_test("D_BFu0s_Uc");
    static STRUCT_IF_C D_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "D_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_Uc, D_BFu0s_Uc)
//============================================================================


struct  D_BFu0s_Ui  {
  double v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 D_BFu0s_Ui) C1{ FL Fs:0 Fi}



static void Test_D_BFu0s_Ui()
{
  {
    init_simple_test("D_BFu0s_Ui");
    static STRUCT_IF_C D_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "D_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_Ui, D_BFu0s_Ui)
//============================================================================


struct  D_BFu0s_Ul  {
  double v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 D_BFu0s_Ul) C1{ FL Fs:0 FL}



static void Test_D_BFu0s_Ul()
{
  {
    init_simple_test("D_BFu0s_Ul");
    static STRUCT_IF_C D_BFu0s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "D_BFu0s_Ul.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_Ul, D_BFu0s_Ul)
//============================================================================


struct  D_BFu0s_Us  {
  double v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 D_BFu0s_Us) C1{ FL Fs:0 Fs}



static void Test_D_BFu0s_Us()
{
  {
    init_simple_test("D_BFu0s_Us");
    static STRUCT_IF_C D_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "D_BFu0s_Us.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_Us, D_BFu0s_Us)
//============================================================================


struct  D_BFu0s_Vp  {
  double v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 D_BFu0s_Vp) C1{ FL Fs:0 Fp}



static void Test_D_BFu0s_Vp()
{
  {
    init_simple_test("D_BFu0s_Vp");
    static STRUCT_IF_C D_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "D_BFu0s_Vp.v1");
    check_field_offset(lv, v2, 8, "D_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu0s_Vp, D_BFu0s_Vp)
//============================================================================


struct  D_BFu15i_BFu0c  {
  double v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 D_BFu15i_BFu0c) C1{ FL Fi:15 Fc:0}



static void Test_D_BFu15i_BFu0c()
{
  {
    init_simple_test("D_BFu15i_BFu0c");
    static STRUCT_IF_C D_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15i_BFu0c, D_BFu15i_BFu0c)
//============================================================================


struct  D_BFu15i_BFu0i  {
  double v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 D_BFu15i_BFu0i) C1{ FL Fi:15 Fi:0}



static void Test_D_BFu15i_BFu0i()
{
  {
    init_simple_test("D_BFu15i_BFu0i");
    static STRUCT_IF_C D_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15i_BFu0i, D_BFu15i_BFu0i)
//============================================================================


struct  D_BFu15i_BFu0ll  {
  double v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 D_BFu15i_BFu0ll) C1{ FL Fi:15 FL:0}



static void Test_D_BFu15i_BFu0ll()
{
  {
    init_simple_test("D_BFu15i_BFu0ll");
    static STRUCT_IF_C D_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15i_BFu0ll, D_BFu15i_BFu0ll)
//============================================================================


struct  D_BFu15i_BFu0s  {
  double v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 D_BFu15i_BFu0s) C1{ FL Fi:15 Fs:0}



static void Test_D_BFu15i_BFu0s()
{
  {
    init_simple_test("D_BFu15i_BFu0s");
    static STRUCT_IF_C D_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15i_BFu0s, D_BFu15i_BFu0s)
//============================================================================


struct  D_BFu15ll_BFu0c  {
  double v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 D_BFu15ll_BFu0c) C1{ FL FL:15 Fc:0}



static void Test_D_BFu15ll_BFu0c()
{
  {
    init_simple_test("D_BFu15ll_BFu0c");
    static STRUCT_IF_C D_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15ll_BFu0c, D_BFu15ll_BFu0c)
//============================================================================


struct  D_BFu15ll_BFu0i  {
  double v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 D_BFu15ll_BFu0i) C1{ FL FL:15 Fi:0}



static void Test_D_BFu15ll_BFu0i()
{
  {
    init_simple_test("D_BFu15ll_BFu0i");
    static STRUCT_IF_C D_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15ll_BFu0i, D_BFu15ll_BFu0i)
//============================================================================


struct  D_BFu15ll_BFu0ll  {
  double v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 D_BFu15ll_BFu0ll) C1{ FL FL:15 FL:0}



static void Test_D_BFu15ll_BFu0ll()
{
  {
    init_simple_test("D_BFu15ll_BFu0ll");
    static STRUCT_IF_C D_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15ll_BFu0ll, D_BFu15ll_BFu0ll)
//============================================================================


struct  D_BFu15ll_BFu0s  {
  double v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 D_BFu15ll_BFu0s) C1{ FL FL:15 Fs:0}



static void Test_D_BFu15ll_BFu0s()
{
  {
    init_simple_test("D_BFu15ll_BFu0s");
    static STRUCT_IF_C D_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15ll_BFu0s, D_BFu15ll_BFu0s)
//============================================================================


struct  D_BFu15s_BFu0c  {
  double v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 D_BFu15s_BFu0c) C1{ FL Fs:15 Fc:0}



static void Test_D_BFu15s_BFu0c()
{
  {
    init_simple_test("D_BFu15s_BFu0c");
    static STRUCT_IF_C D_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15s_BFu0c, D_BFu15s_BFu0c)
//============================================================================


struct  D_BFu15s_BFu0i  {
  double v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 D_BFu15s_BFu0i) C1{ FL Fs:15 Fi:0}



static void Test_D_BFu15s_BFu0i()
{
  {
    init_simple_test("D_BFu15s_BFu0i");
    static STRUCT_IF_C D_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15s_BFu0i, D_BFu15s_BFu0i)
//============================================================================


struct  D_BFu15s_BFu0ll  {
  double v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 D_BFu15s_BFu0ll) C1{ FL Fs:15 FL:0}



static void Test_D_BFu15s_BFu0ll()
{
  {
    init_simple_test("D_BFu15s_BFu0ll");
    static STRUCT_IF_C D_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15s_BFu0ll, D_BFu15s_BFu0ll)
//============================================================================


struct  D_BFu15s_BFu0s  {
  double v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 D_BFu15s_BFu0s) C1{ FL Fs:15 Fs:0}



static void Test_D_BFu15s_BFu0s()
{
  {
    init_simple_test("D_BFu15s_BFu0s");
    static STRUCT_IF_C D_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "D_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "D_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu15s_BFu0s, D_BFu15s_BFu0s)
//============================================================================


struct  D_BFu16i_BFu0c  {
  double v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 D_BFu16i_BFu0c) C1{ FL Fi:16 Fc:0}



static void Test_D_BFu16i_BFu0c()
{
  {
    init_simple_test("D_BFu16i_BFu0c");
    static STRUCT_IF_C D_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16i_BFu0c, D_BFu16i_BFu0c)
//============================================================================


struct  D_BFu16i_BFu0i  {
  double v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 D_BFu16i_BFu0i) C1{ FL Fi:16 Fi:0}



static void Test_D_BFu16i_BFu0i()
{
  {
    init_simple_test("D_BFu16i_BFu0i");
    static STRUCT_IF_C D_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16i_BFu0i, D_BFu16i_BFu0i)
//============================================================================


struct  D_BFu16i_BFu0ll  {
  double v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 D_BFu16i_BFu0ll) C1{ FL Fi:16 FL:0}



static void Test_D_BFu16i_BFu0ll()
{
  {
    init_simple_test("D_BFu16i_BFu0ll");
    static STRUCT_IF_C D_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16i_BFu0ll, D_BFu16i_BFu0ll)
//============================================================================


struct  D_BFu16i_BFu0s  {
  double v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 D_BFu16i_BFu0s) C1{ FL Fi:16 Fs:0}



static void Test_D_BFu16i_BFu0s()
{
  {
    init_simple_test("D_BFu16i_BFu0s");
    static STRUCT_IF_C D_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16i_BFu0s, D_BFu16i_BFu0s)
//============================================================================


struct  D_BFu16ll_BFu0c  {
  double v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 D_BFu16ll_BFu0c) C1{ FL FL:16 Fc:0}



static void Test_D_BFu16ll_BFu0c()
{
  {
    init_simple_test("D_BFu16ll_BFu0c");
    static STRUCT_IF_C D_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16ll_BFu0c, D_BFu16ll_BFu0c)
//============================================================================


struct  D_BFu16ll_BFu0i  {
  double v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 D_BFu16ll_BFu0i) C1{ FL FL:16 Fi:0}



static void Test_D_BFu16ll_BFu0i()
{
  {
    init_simple_test("D_BFu16ll_BFu0i");
    static STRUCT_IF_C D_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16ll_BFu0i, D_BFu16ll_BFu0i)
//============================================================================


struct  D_BFu16ll_BFu0ll  {
  double v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 D_BFu16ll_BFu0ll) C1{ FL FL:16 FL:0}



static void Test_D_BFu16ll_BFu0ll()
{
  {
    init_simple_test("D_BFu16ll_BFu0ll");
    static STRUCT_IF_C D_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16ll_BFu0ll, D_BFu16ll_BFu0ll)
//============================================================================


struct  D_BFu16ll_BFu0s  {
  double v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 D_BFu16ll_BFu0s) C1{ FL FL:16 Fs:0}



static void Test_D_BFu16ll_BFu0s()
{
  {
    init_simple_test("D_BFu16ll_BFu0s");
    static STRUCT_IF_C D_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16ll_BFu0s, D_BFu16ll_BFu0s)
//============================================================================


struct  D_BFu16s_BFu0c  {
  double v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 D_BFu16s_BFu0c) C1{ FL Fs:16 Fc:0}



static void Test_D_BFu16s_BFu0c()
{
  {
    init_simple_test("D_BFu16s_BFu0c");
    static STRUCT_IF_C D_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16s_BFu0c, D_BFu16s_BFu0c)
//============================================================================


struct  D_BFu16s_BFu0i  {
  double v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 D_BFu16s_BFu0i) C1{ FL Fs:16 Fi:0}



static void Test_D_BFu16s_BFu0i()
{
  {
    init_simple_test("D_BFu16s_BFu0i");
    static STRUCT_IF_C D_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16s_BFu0i, D_BFu16s_BFu0i)
//============================================================================


struct  D_BFu16s_BFu0ll  {
  double v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 D_BFu16s_BFu0ll) C1{ FL Fs:16 FL:0}



static void Test_D_BFu16s_BFu0ll()
{
  {
    init_simple_test("D_BFu16s_BFu0ll");
    static STRUCT_IF_C D_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16s_BFu0ll, D_BFu16s_BFu0ll)
//============================================================================


struct  D_BFu16s_BFu0s  {
  double v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 D_BFu16s_BFu0s) C1{ FL Fs:16 Fs:0}



static void Test_D_BFu16s_BFu0s()
{
  {
    init_simple_test("D_BFu16s_BFu0s");
    static STRUCT_IF_C D_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "D_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "D_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu16s_BFu0s, D_BFu16s_BFu0s)
//============================================================================


struct  D_BFu17i_BFu0c  {
  double v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 D_BFu17i_BFu0c) C1{ FL Fi:17 Fc:0}



static void Test_D_BFu17i_BFu0c()
{
  {
    init_simple_test("D_BFu17i_BFu0c");
    static STRUCT_IF_C D_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17i_BFu0c, D_BFu17i_BFu0c)
//============================================================================


struct  D_BFu17i_BFu0i  {
  double v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 D_BFu17i_BFu0i) C1{ FL Fi:17 Fi:0}



static void Test_D_BFu17i_BFu0i()
{
  {
    init_simple_test("D_BFu17i_BFu0i");
    static STRUCT_IF_C D_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17i_BFu0i, D_BFu17i_BFu0i)
//============================================================================


struct  D_BFu17i_BFu0ll  {
  double v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 D_BFu17i_BFu0ll) C1{ FL Fi:17 FL:0}



static void Test_D_BFu17i_BFu0ll()
{
  {
    init_simple_test("D_BFu17i_BFu0ll");
    static STRUCT_IF_C D_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17i_BFu0ll, D_BFu17i_BFu0ll)
//============================================================================


struct  D_BFu17i_BFu0s  {
  double v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 D_BFu17i_BFu0s) C1{ FL Fi:17 Fs:0}



static void Test_D_BFu17i_BFu0s()
{
  {
    init_simple_test("D_BFu17i_BFu0s");
    static STRUCT_IF_C D_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17i_BFu0s, D_BFu17i_BFu0s)
//============================================================================


struct  D_BFu17ll_BFu0c  {
  double v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 D_BFu17ll_BFu0c) C1{ FL FL:17 Fc:0}



static void Test_D_BFu17ll_BFu0c()
{
  {
    init_simple_test("D_BFu17ll_BFu0c");
    static STRUCT_IF_C D_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17ll_BFu0c, D_BFu17ll_BFu0c)
//============================================================================


struct  D_BFu17ll_BFu0i  {
  double v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 D_BFu17ll_BFu0i) C1{ FL FL:17 Fi:0}



static void Test_D_BFu17ll_BFu0i()
{
  {
    init_simple_test("D_BFu17ll_BFu0i");
    static STRUCT_IF_C D_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17ll_BFu0i, D_BFu17ll_BFu0i)
//============================================================================


struct  D_BFu17ll_BFu0ll  {
  double v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 D_BFu17ll_BFu0ll) C1{ FL FL:17 FL:0}



static void Test_D_BFu17ll_BFu0ll()
{
  {
    init_simple_test("D_BFu17ll_BFu0ll");
    static STRUCT_IF_C D_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17ll_BFu0ll, D_BFu17ll_BFu0ll)
//============================================================================


struct  D_BFu17ll_BFu0s  {
  double v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 D_BFu17ll_BFu0s) C1{ FL FL:17 Fs:0}



static void Test_D_BFu17ll_BFu0s()
{
  {
    init_simple_test("D_BFu17ll_BFu0s");
    static STRUCT_IF_C D_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "D_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "D_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu17ll_BFu0s, D_BFu17ll_BFu0s)
//============================================================================


struct  D_BFu1c_BFu0c  {
  double v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 D_BFu1c_BFu0c) C1{ FL Fc:1 Fc:0}



static void Test_D_BFu1c_BFu0c()
{
  {
    init_simple_test("D_BFu1c_BFu0c");
    static STRUCT_IF_C D_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1c_BFu0c, D_BFu1c_BFu0c)
//============================================================================


struct  D_BFu1c_BFu0i  {
  double v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 D_BFu1c_BFu0i) C1{ FL Fc:1 Fi:0}



static void Test_D_BFu1c_BFu0i()
{
  {
    init_simple_test("D_BFu1c_BFu0i");
    static STRUCT_IF_C D_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1c_BFu0i, D_BFu1c_BFu0i)
//============================================================================


struct  D_BFu1c_BFu0ll  {
  double v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 D_BFu1c_BFu0ll) C1{ FL Fc:1 FL:0}



static void Test_D_BFu1c_BFu0ll()
{
  {
    init_simple_test("D_BFu1c_BFu0ll");
    static STRUCT_IF_C D_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1c_BFu0ll, D_BFu1c_BFu0ll)
//============================================================================


struct  D_BFu1c_BFu0s  {
  double v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 D_BFu1c_BFu0s) C1{ FL Fc:1 Fs:0}



static void Test_D_BFu1c_BFu0s()
{
  {
    init_simple_test("D_BFu1c_BFu0s");
    static STRUCT_IF_C D_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1c_BFu0s, D_BFu1c_BFu0s)
//============================================================================


struct  D_BFu1i_BFu0c  {
  double v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 D_BFu1i_BFu0c) C1{ FL Fi:1 Fc:0}



static void Test_D_BFu1i_BFu0c()
{
  {
    init_simple_test("D_BFu1i_BFu0c");
    static STRUCT_IF_C D_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1i_BFu0c, D_BFu1i_BFu0c)
//============================================================================


struct  D_BFu1i_BFu0i  {
  double v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 D_BFu1i_BFu0i) C1{ FL Fi:1 Fi:0}



static void Test_D_BFu1i_BFu0i()
{
  {
    init_simple_test("D_BFu1i_BFu0i");
    static STRUCT_IF_C D_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1i_BFu0i, D_BFu1i_BFu0i)
//============================================================================


struct  D_BFu1i_BFu0ll  {
  double v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 D_BFu1i_BFu0ll) C1{ FL Fi:1 FL:0}



static void Test_D_BFu1i_BFu0ll()
{
  {
    init_simple_test("D_BFu1i_BFu0ll");
    static STRUCT_IF_C D_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1i_BFu0ll, D_BFu1i_BFu0ll)
//============================================================================


struct  D_BFu1i_BFu0s  {
  double v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 D_BFu1i_BFu0s) C1{ FL Fi:1 Fs:0}



static void Test_D_BFu1i_BFu0s()
{
  {
    init_simple_test("D_BFu1i_BFu0s");
    static STRUCT_IF_C D_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1i_BFu0s, D_BFu1i_BFu0s)
//============================================================================


struct  D_BFu1ll_BFu0c  {
  double v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 D_BFu1ll_BFu0c) C1{ FL FL:1 Fc:0}



static void Test_D_BFu1ll_BFu0c()
{
  {
    init_simple_test("D_BFu1ll_BFu0c");
    static STRUCT_IF_C D_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1ll_BFu0c, D_BFu1ll_BFu0c)
//============================================================================


struct  D_BFu1ll_BFu0i  {
  double v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 D_BFu1ll_BFu0i) C1{ FL FL:1 Fi:0}



static void Test_D_BFu1ll_BFu0i()
{
  {
    init_simple_test("D_BFu1ll_BFu0i");
    static STRUCT_IF_C D_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1ll_BFu0i, D_BFu1ll_BFu0i)
//============================================================================


struct  D_BFu1ll_BFu0ll  {
  double v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 D_BFu1ll_BFu0ll) C1{ FL FL:1 FL:0}



static void Test_D_BFu1ll_BFu0ll()
{
  {
    init_simple_test("D_BFu1ll_BFu0ll");
    static STRUCT_IF_C D_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1ll_BFu0ll, D_BFu1ll_BFu0ll)
//============================================================================


struct  D_BFu1ll_BFu0s  {
  double v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 D_BFu1ll_BFu0s) C1{ FL FL:1 Fs:0}



static void Test_D_BFu1ll_BFu0s()
{
  {
    init_simple_test("D_BFu1ll_BFu0s");
    static STRUCT_IF_C D_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1ll_BFu0s, D_BFu1ll_BFu0s)
//============================================================================


struct  D_BFu1s_BFu0c  {
  double v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 D_BFu1s_BFu0c) C1{ FL Fs:1 Fc:0}



static void Test_D_BFu1s_BFu0c()
{
  {
    init_simple_test("D_BFu1s_BFu0c");
    static STRUCT_IF_C D_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1s_BFu0c, D_BFu1s_BFu0c)
//============================================================================


struct  D_BFu1s_BFu0i  {
  double v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 D_BFu1s_BFu0i) C1{ FL Fs:1 Fi:0}



static void Test_D_BFu1s_BFu0i()
{
  {
    init_simple_test("D_BFu1s_BFu0i");
    static STRUCT_IF_C D_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1s_BFu0i, D_BFu1s_BFu0i)
//============================================================================


struct  D_BFu1s_BFu0ll  {
  double v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 D_BFu1s_BFu0ll) C1{ FL Fs:1 FL:0}



static void Test_D_BFu1s_BFu0ll()
{
  {
    init_simple_test("D_BFu1s_BFu0ll");
    static STRUCT_IF_C D_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1s_BFu0ll, D_BFu1s_BFu0ll)
//============================================================================


struct  D_BFu1s_BFu0s  {
  double v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 D_BFu1s_BFu0s) C1{ FL Fs:1 Fs:0}



static void Test_D_BFu1s_BFu0s()
{
  {
    init_simple_test("D_BFu1s_BFu0s");
    static STRUCT_IF_C D_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "D_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu1s_BFu0s, D_BFu1s_BFu0s)
//============================================================================


struct  D_BFu31i_BFu0c  {
  double v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 D_BFu31i_BFu0c) C1{ FL Fi:31 Fc:0}



static void Test_D_BFu31i_BFu0c()
{
  {
    init_simple_test("D_BFu31i_BFu0c");
    static STRUCT_IF_C D_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31i_BFu0c, D_BFu31i_BFu0c)
//============================================================================


struct  D_BFu31i_BFu0i  {
  double v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 D_BFu31i_BFu0i) C1{ FL Fi:31 Fi:0}



static void Test_D_BFu31i_BFu0i()
{
  {
    init_simple_test("D_BFu31i_BFu0i");
    static STRUCT_IF_C D_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31i_BFu0i, D_BFu31i_BFu0i)
//============================================================================


struct  D_BFu31i_BFu0ll  {
  double v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 D_BFu31i_BFu0ll) C1{ FL Fi:31 FL:0}



static void Test_D_BFu31i_BFu0ll()
{
  {
    init_simple_test("D_BFu31i_BFu0ll");
    static STRUCT_IF_C D_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31i_BFu0ll, D_BFu31i_BFu0ll)
//============================================================================


struct  D_BFu31i_BFu0s  {
  double v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 D_BFu31i_BFu0s) C1{ FL Fi:31 Fs:0}



static void Test_D_BFu31i_BFu0s()
{
  {
    init_simple_test("D_BFu31i_BFu0s");
    static STRUCT_IF_C D_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31i_BFu0s, D_BFu31i_BFu0s)
//============================================================================


struct  D_BFu31ll_BFu0c  {
  double v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 D_BFu31ll_BFu0c) C1{ FL FL:31 Fc:0}



static void Test_D_BFu31ll_BFu0c()
{
  {
    init_simple_test("D_BFu31ll_BFu0c");
    static STRUCT_IF_C D_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31ll_BFu0c, D_BFu31ll_BFu0c)
//============================================================================


struct  D_BFu31ll_BFu0i  {
  double v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 D_BFu31ll_BFu0i) C1{ FL FL:31 Fi:0}



static void Test_D_BFu31ll_BFu0i()
{
  {
    init_simple_test("D_BFu31ll_BFu0i");
    static STRUCT_IF_C D_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31ll_BFu0i, D_BFu31ll_BFu0i)
//============================================================================


struct  D_BFu31ll_BFu0ll  {
  double v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 D_BFu31ll_BFu0ll) C1{ FL FL:31 FL:0}



static void Test_D_BFu31ll_BFu0ll()
{
  {
    init_simple_test("D_BFu31ll_BFu0ll");
    static STRUCT_IF_C D_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31ll_BFu0ll, D_BFu31ll_BFu0ll)
//============================================================================


struct  D_BFu31ll_BFu0s  {
  double v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 D_BFu31ll_BFu0s) C1{ FL FL:31 Fs:0}



static void Test_D_BFu31ll_BFu0s()
{
  {
    init_simple_test("D_BFu31ll_BFu0s");
    static STRUCT_IF_C D_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "D_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "D_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu31ll_BFu0s, D_BFu31ll_BFu0s)
//============================================================================


struct  D_BFu32i_BFu0c  {
  double v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 D_BFu32i_BFu0c) C1{ FL Fi:32 Fc:0}



static void Test_D_BFu32i_BFu0c()
{
  {
    init_simple_test("D_BFu32i_BFu0c");
    static STRUCT_IF_C D_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32i_BFu0c, D_BFu32i_BFu0c)
//============================================================================


struct  D_BFu32i_BFu0i  {
  double v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 D_BFu32i_BFu0i) C1{ FL Fi:32 Fi:0}



static void Test_D_BFu32i_BFu0i()
{
  {
    init_simple_test("D_BFu32i_BFu0i");
    static STRUCT_IF_C D_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32i_BFu0i, D_BFu32i_BFu0i)
//============================================================================


struct  D_BFu32i_BFu0ll  {
  double v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 D_BFu32i_BFu0ll) C1{ FL Fi:32 FL:0}



static void Test_D_BFu32i_BFu0ll()
{
  {
    init_simple_test("D_BFu32i_BFu0ll");
    static STRUCT_IF_C D_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32i_BFu0ll, D_BFu32i_BFu0ll)
//============================================================================


struct  D_BFu32i_BFu0s  {
  double v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 D_BFu32i_BFu0s) C1{ FL Fi:32 Fs:0}



static void Test_D_BFu32i_BFu0s()
{
  {
    init_simple_test("D_BFu32i_BFu0s");
    static STRUCT_IF_C D_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32i_BFu0s, D_BFu32i_BFu0s)
//============================================================================


struct  D_BFu32ll_BFu0c  {
  double v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 D_BFu32ll_BFu0c) C1{ FL FL:32 Fc:0}



static void Test_D_BFu32ll_BFu0c()
{
  {
    init_simple_test("D_BFu32ll_BFu0c");
    static STRUCT_IF_C D_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32ll_BFu0c, D_BFu32ll_BFu0c)
//============================================================================


struct  D_BFu32ll_BFu0i  {
  double v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 D_BFu32ll_BFu0i) C1{ FL FL:32 Fi:0}



static void Test_D_BFu32ll_BFu0i()
{
  {
    init_simple_test("D_BFu32ll_BFu0i");
    static STRUCT_IF_C D_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32ll_BFu0i, D_BFu32ll_BFu0i)
//============================================================================


struct  D_BFu32ll_BFu0ll  {
  double v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 D_BFu32ll_BFu0ll) C1{ FL FL:32 FL:0}



static void Test_D_BFu32ll_BFu0ll()
{
  {
    init_simple_test("D_BFu32ll_BFu0ll");
    static STRUCT_IF_C D_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32ll_BFu0ll, D_BFu32ll_BFu0ll)
//============================================================================


struct  D_BFu32ll_BFu0s  {
  double v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 D_BFu32ll_BFu0s) C1{ FL FL:32 Fs:0}



static void Test_D_BFu32ll_BFu0s()
{
  {
    init_simple_test("D_BFu32ll_BFu0s");
    static STRUCT_IF_C D_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "D_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "D_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu32ll_BFu0s, D_BFu32ll_BFu0s)
//============================================================================


struct  D_BFu33_BFu0c  {
  double v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 D_BFu33_BFu0c) C1{ FL FL:33 Fc:0}



static void Test_D_BFu33_BFu0c()
{
  {
    init_simple_test("D_BFu33_BFu0c");
    static STRUCT_IF_C D_BFu33_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu33_BFu0c, D_BFu33_BFu0c)
//============================================================================


struct  D_BFu33_BFu0i  {
  double v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 D_BFu33_BFu0i) C1{ FL FL:33 Fi:0}



static void Test_D_BFu33_BFu0i()
{
  {
    init_simple_test("D_BFu33_BFu0i");
    static STRUCT_IF_C D_BFu33_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu33_BFu0i, D_BFu33_BFu0i)
//============================================================================


struct  D_BFu33_BFu0ll  {
  double v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 D_BFu33_BFu0ll) C1{ FL FL:33 FL:0}



static void Test_D_BFu33_BFu0ll()
{
  {
    init_simple_test("D_BFu33_BFu0ll");
    static STRUCT_IF_C D_BFu33_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu33_BFu0ll, D_BFu33_BFu0ll)
//============================================================================


struct  D_BFu33_BFu0s  {
  double v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 D_BFu33_BFu0s) C1{ FL FL:33 Fs:0}



static void Test_D_BFu33_BFu0s()
{
  {
    init_simple_test("D_BFu33_BFu0s");
    static STRUCT_IF_C D_BFu33_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(D_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "D_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "D_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu33_BFu0s, D_BFu33_BFu0s)
//============================================================================


struct  D_BFu7c_BFu0c  {
  double v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 D_BFu7c_BFu0c) C1{ FL Fc:7 Fc:0}



static void Test_D_BFu7c_BFu0c()
{
  {
    init_simple_test("D_BFu7c_BFu0c");
    static STRUCT_IF_C D_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7c_BFu0c, D_BFu7c_BFu0c)
//============================================================================


struct  D_BFu7c_BFu0i  {
  double v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 D_BFu7c_BFu0i) C1{ FL Fc:7 Fi:0}



static void Test_D_BFu7c_BFu0i()
{
  {
    init_simple_test("D_BFu7c_BFu0i");
    static STRUCT_IF_C D_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7c_BFu0i, D_BFu7c_BFu0i)
//============================================================================


struct  D_BFu7c_BFu0ll  {
  double v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 D_BFu7c_BFu0ll) C1{ FL Fc:7 FL:0}



static void Test_D_BFu7c_BFu0ll()
{
  {
    init_simple_test("D_BFu7c_BFu0ll");
    static STRUCT_IF_C D_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7c_BFu0ll, D_BFu7c_BFu0ll)
//============================================================================


struct  D_BFu7c_BFu0s  {
  double v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 D_BFu7c_BFu0s) C1{ FL Fc:7 Fs:0}



static void Test_D_BFu7c_BFu0s()
{
  {
    init_simple_test("D_BFu7c_BFu0s");
    static STRUCT_IF_C D_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7c_BFu0s, D_BFu7c_BFu0s)
//============================================================================


struct  D_BFu7i_BFu0c  {
  double v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 D_BFu7i_BFu0c) C1{ FL Fi:7 Fc:0}



static void Test_D_BFu7i_BFu0c()
{
  {
    init_simple_test("D_BFu7i_BFu0c");
    static STRUCT_IF_C D_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7i_BFu0c, D_BFu7i_BFu0c)
//============================================================================


struct  D_BFu7i_BFu0i  {
  double v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 D_BFu7i_BFu0i) C1{ FL Fi:7 Fi:0}



static void Test_D_BFu7i_BFu0i()
{
  {
    init_simple_test("D_BFu7i_BFu0i");
    static STRUCT_IF_C D_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7i_BFu0i, D_BFu7i_BFu0i)
//============================================================================


struct  D_BFu7i_BFu0ll  {
  double v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 D_BFu7i_BFu0ll) C1{ FL Fi:7 FL:0}



static void Test_D_BFu7i_BFu0ll()
{
  {
    init_simple_test("D_BFu7i_BFu0ll");
    static STRUCT_IF_C D_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7i_BFu0ll, D_BFu7i_BFu0ll)
//============================================================================


struct  D_BFu7i_BFu0s  {
  double v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 D_BFu7i_BFu0s) C1{ FL Fi:7 Fs:0}



static void Test_D_BFu7i_BFu0s()
{
  {
    init_simple_test("D_BFu7i_BFu0s");
    static STRUCT_IF_C D_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7i_BFu0s, D_BFu7i_BFu0s)
//============================================================================


struct  D_BFu7ll_BFu0c  {
  double v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 D_BFu7ll_BFu0c) C1{ FL FL:7 Fc:0}



static void Test_D_BFu7ll_BFu0c()
{
  {
    init_simple_test("D_BFu7ll_BFu0c");
    static STRUCT_IF_C D_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7ll_BFu0c, D_BFu7ll_BFu0c)
//============================================================================


struct  D_BFu7ll_BFu0i  {
  double v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 D_BFu7ll_BFu0i) C1{ FL FL:7 Fi:0}



static void Test_D_BFu7ll_BFu0i()
{
  {
    init_simple_test("D_BFu7ll_BFu0i");
    static STRUCT_IF_C D_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7ll_BFu0i, D_BFu7ll_BFu0i)
//============================================================================


struct  D_BFu7ll_BFu0ll  {
  double v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 D_BFu7ll_BFu0ll) C1{ FL FL:7 FL:0}



static void Test_D_BFu7ll_BFu0ll()
{
  {
    init_simple_test("D_BFu7ll_BFu0ll");
    static STRUCT_IF_C D_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7ll_BFu0ll, D_BFu7ll_BFu0ll)
//============================================================================


struct  D_BFu7ll_BFu0s  {
  double v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 D_BFu7ll_BFu0s) C1{ FL FL:7 Fs:0}



static void Test_D_BFu7ll_BFu0s()
{
  {
    init_simple_test("D_BFu7ll_BFu0s");
    static STRUCT_IF_C D_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7ll_BFu0s, D_BFu7ll_BFu0s)
//============================================================================


struct  D_BFu7s_BFu0c  {
  double v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 D_BFu7s_BFu0c) C1{ FL Fs:7 Fc:0}



static void Test_D_BFu7s_BFu0c()
{
  {
    init_simple_test("D_BFu7s_BFu0c");
    static STRUCT_IF_C D_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7s_BFu0c, D_BFu7s_BFu0c)
//============================================================================


struct  D_BFu7s_BFu0i  {
  double v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 D_BFu7s_BFu0i) C1{ FL Fs:7 Fi:0}



static void Test_D_BFu7s_BFu0i()
{
  {
    init_simple_test("D_BFu7s_BFu0i");
    static STRUCT_IF_C D_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7s_BFu0i, D_BFu7s_BFu0i)
//============================================================================


struct  D_BFu7s_BFu0ll  {
  double v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 D_BFu7s_BFu0ll) C1{ FL Fs:7 FL:0}



static void Test_D_BFu7s_BFu0ll()
{
  {
    init_simple_test("D_BFu7s_BFu0ll");
    static STRUCT_IF_C D_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7s_BFu0ll, D_BFu7s_BFu0ll)
//============================================================================


struct  D_BFu7s_BFu0s  {
  double v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 D_BFu7s_BFu0s) C1{ FL Fs:7 Fs:0}



static void Test_D_BFu7s_BFu0s()
{
  {
    init_simple_test("D_BFu7s_BFu0s");
    static STRUCT_IF_C D_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "D_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "D_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu7s_BFu0s, D_BFu7s_BFu0s)
//============================================================================


struct  D_BFu8c_BFu0c  {
  double v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 D_BFu8c_BFu0c) C1{ FL Fc:8 Fc:0}



static void Test_D_BFu8c_BFu0c()
{
  {
    init_simple_test("D_BFu8c_BFu0c");
    static STRUCT_IF_C D_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8c_BFu0c, D_BFu8c_BFu0c)
//============================================================================


struct  D_BFu8c_BFu0i  {
  double v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 D_BFu8c_BFu0i) C1{ FL Fc:8 Fi:0}



static void Test_D_BFu8c_BFu0i()
{
  {
    init_simple_test("D_BFu8c_BFu0i");
    static STRUCT_IF_C D_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8c_BFu0i, D_BFu8c_BFu0i)
//============================================================================


struct  D_BFu8c_BFu0ll  {
  double v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 D_BFu8c_BFu0ll) C1{ FL Fc:8 FL:0}



static void Test_D_BFu8c_BFu0ll()
{
  {
    init_simple_test("D_BFu8c_BFu0ll");
    static STRUCT_IF_C D_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8c_BFu0ll, D_BFu8c_BFu0ll)
//============================================================================


struct  D_BFu8c_BFu0s  {
  double v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 D_BFu8c_BFu0s) C1{ FL Fc:8 Fs:0}



static void Test_D_BFu8c_BFu0s()
{
  {
    init_simple_test("D_BFu8c_BFu0s");
    static STRUCT_IF_C D_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8c_BFu0s, D_BFu8c_BFu0s)
//============================================================================


struct  D_BFu8i_BFu0c  {
  double v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 D_BFu8i_BFu0c) C1{ FL Fi:8 Fc:0}



static void Test_D_BFu8i_BFu0c()
{
  {
    init_simple_test("D_BFu8i_BFu0c");
    static STRUCT_IF_C D_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8i_BFu0c, D_BFu8i_BFu0c)
//============================================================================


struct  D_BFu8i_BFu0i  {
  double v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 D_BFu8i_BFu0i) C1{ FL Fi:8 Fi:0}



static void Test_D_BFu8i_BFu0i()
{
  {
    init_simple_test("D_BFu8i_BFu0i");
    static STRUCT_IF_C D_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8i_BFu0i, D_BFu8i_BFu0i)
//============================================================================


struct  D_BFu8i_BFu0ll  {
  double v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 D_BFu8i_BFu0ll) C1{ FL Fi:8 FL:0}



static void Test_D_BFu8i_BFu0ll()
{
  {
    init_simple_test("D_BFu8i_BFu0ll");
    static STRUCT_IF_C D_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8i_BFu0ll, D_BFu8i_BFu0ll)
//============================================================================


struct  D_BFu8i_BFu0s  {
  double v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 D_BFu8i_BFu0s) C1{ FL Fi:8 Fs:0}



static void Test_D_BFu8i_BFu0s()
{
  {
    init_simple_test("D_BFu8i_BFu0s");
    static STRUCT_IF_C D_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8i_BFu0s, D_BFu8i_BFu0s)
//============================================================================


struct  D_BFu8ll_BFu0c  {
  double v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 D_BFu8ll_BFu0c) C1{ FL FL:8 Fc:0}



static void Test_D_BFu8ll_BFu0c()
{
  {
    init_simple_test("D_BFu8ll_BFu0c");
    static STRUCT_IF_C D_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8ll_BFu0c, D_BFu8ll_BFu0c)
//============================================================================


struct  D_BFu8ll_BFu0i  {
  double v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 D_BFu8ll_BFu0i) C1{ FL FL:8 Fi:0}



static void Test_D_BFu8ll_BFu0i()
{
  {
    init_simple_test("D_BFu8ll_BFu0i");
    static STRUCT_IF_C D_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8ll_BFu0i, D_BFu8ll_BFu0i)
//============================================================================


struct  D_BFu8ll_BFu0ll  {
  double v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 D_BFu8ll_BFu0ll) C1{ FL FL:8 FL:0}



static void Test_D_BFu8ll_BFu0ll()
{
  {
    init_simple_test("D_BFu8ll_BFu0ll");
    static STRUCT_IF_C D_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8ll_BFu0ll, D_BFu8ll_BFu0ll)
//============================================================================


struct  D_BFu8ll_BFu0s  {
  double v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 D_BFu8ll_BFu0s) C1{ FL FL:8 Fs:0}



static void Test_D_BFu8ll_BFu0s()
{
  {
    init_simple_test("D_BFu8ll_BFu0s");
    static STRUCT_IF_C D_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8ll_BFu0s, D_BFu8ll_BFu0s)
//============================================================================


struct  D_BFu8s_BFu0c  {
  double v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 D_BFu8s_BFu0c) C1{ FL Fs:8 Fc:0}



static void Test_D_BFu8s_BFu0c()
{
  {
    init_simple_test("D_BFu8s_BFu0c");
    static STRUCT_IF_C D_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8s_BFu0c, D_BFu8s_BFu0c)
//============================================================================


struct  D_BFu8s_BFu0i  {
  double v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 D_BFu8s_BFu0i) C1{ FL Fs:8 Fi:0}



static void Test_D_BFu8s_BFu0i()
{
  {
    init_simple_test("D_BFu8s_BFu0i");
    static STRUCT_IF_C D_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8s_BFu0i, D_BFu8s_BFu0i)
//============================================================================


struct  D_BFu8s_BFu0ll  {
  double v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 D_BFu8s_BFu0ll) C1{ FL Fs:8 FL:0}



static void Test_D_BFu8s_BFu0ll()
{
  {
    init_simple_test("D_BFu8s_BFu0ll");
    static STRUCT_IF_C D_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8s_BFu0ll, D_BFu8s_BFu0ll)
//============================================================================


struct  D_BFu8s_BFu0s  {
  double v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 D_BFu8s_BFu0s) C1{ FL Fs:8 Fs:0}



static void Test_D_BFu8s_BFu0s()
{
  {
    init_simple_test("D_BFu8s_BFu0s");
    static STRUCT_IF_C D_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "D_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "D_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu8s_BFu0s, D_BFu8s_BFu0s)
//============================================================================


struct  D_BFu9i_BFu0c  {
  double v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 D_BFu9i_BFu0c) C1{ FL Fi:9 Fc:0}



static void Test_D_BFu9i_BFu0c()
{
  {
    init_simple_test("D_BFu9i_BFu0c");
    static STRUCT_IF_C D_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9i_BFu0c, D_BFu9i_BFu0c)
//============================================================================


struct  D_BFu9i_BFu0i  {
  double v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 D_BFu9i_BFu0i) C1{ FL Fi:9 Fi:0}



static void Test_D_BFu9i_BFu0i()
{
  {
    init_simple_test("D_BFu9i_BFu0i");
    static STRUCT_IF_C D_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9i_BFu0i, D_BFu9i_BFu0i)
//============================================================================


struct  D_BFu9i_BFu0ll  {
  double v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 D_BFu9i_BFu0ll) C1{ FL Fi:9 FL:0}



static void Test_D_BFu9i_BFu0ll()
{
  {
    init_simple_test("D_BFu9i_BFu0ll");
    static STRUCT_IF_C D_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9i_BFu0ll, D_BFu9i_BFu0ll)
//============================================================================


struct  D_BFu9i_BFu0s  {
  double v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 D_BFu9i_BFu0s) C1{ FL Fi:9 Fs:0}



static void Test_D_BFu9i_BFu0s()
{
  {
    init_simple_test("D_BFu9i_BFu0s");
    static STRUCT_IF_C D_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9i_BFu0s, D_BFu9i_BFu0s)
//============================================================================


struct  D_BFu9ll_BFu0c  {
  double v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 D_BFu9ll_BFu0c) C1{ FL FL:9 Fc:0}



static void Test_D_BFu9ll_BFu0c()
{
  {
    init_simple_test("D_BFu9ll_BFu0c");
    static STRUCT_IF_C D_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9ll_BFu0c, D_BFu9ll_BFu0c)
//============================================================================


struct  D_BFu9ll_BFu0i  {
  double v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 D_BFu9ll_BFu0i) C1{ FL FL:9 Fi:0}



static void Test_D_BFu9ll_BFu0i()
{
  {
    init_simple_test("D_BFu9ll_BFu0i");
    static STRUCT_IF_C D_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9ll_BFu0i, D_BFu9ll_BFu0i)
//============================================================================


struct  D_BFu9ll_BFu0ll  {
  double v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 D_BFu9ll_BFu0ll) C1{ FL FL:9 FL:0}



static void Test_D_BFu9ll_BFu0ll()
{
  {
    init_simple_test("D_BFu9ll_BFu0ll");
    static STRUCT_IF_C D_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9ll_BFu0ll, D_BFu9ll_BFu0ll)
//============================================================================


struct  D_BFu9ll_BFu0s  {
  double v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 D_BFu9ll_BFu0s) C1{ FL FL:9 Fs:0}



static void Test_D_BFu9ll_BFu0s()
{
  {
    init_simple_test("D_BFu9ll_BFu0s");
    static STRUCT_IF_C D_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9ll_BFu0s, D_BFu9ll_BFu0s)
//============================================================================


struct  D_BFu9s_BFu0c  {
  double v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 D_BFu9s_BFu0c) C1{ FL Fs:9 Fc:0}



static void Test_D_BFu9s_BFu0c()
{
  {
    init_simple_test("D_BFu9s_BFu0c");
    static STRUCT_IF_C D_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "D_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9s_BFu0c, D_BFu9s_BFu0c)
//============================================================================


struct  D_BFu9s_BFu0i  {
  double v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 D_BFu9s_BFu0i) C1{ FL Fs:9 Fi:0}



static void Test_D_BFu9s_BFu0i()
{
  {
    init_simple_test("D_BFu9s_BFu0i");
    static STRUCT_IF_C D_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "D_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9s_BFu0i, D_BFu9s_BFu0i)
//============================================================================


struct  D_BFu9s_BFu0ll  {
  double v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 D_BFu9s_BFu0ll) C1{ FL Fs:9 FL:0}



static void Test_D_BFu9s_BFu0ll()
{
  {
    init_simple_test("D_BFu9s_BFu0ll");
    static STRUCT_IF_C D_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9s_BFu0ll, D_BFu9s_BFu0ll)
//============================================================================


struct  D_BFu9s_BFu0s  {
  double v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 D_BFu9s_BFu0s) C1{ FL Fs:9 Fs:0}



static void Test_D_BFu9s_BFu0s()
{
  {
    init_simple_test("D_BFu9s_BFu0s");
    static STRUCT_IF_C D_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "D_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "D_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "D_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_D_BFu9s_BFu0s, D_BFu9s_BFu0s)
//============================================================================


struct  D_C_BFu0c  {
  double v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 D_C_BFu0c) C1{ FL Fc Fc:0}



static void Test_D_C_BFu0c()
{
  {
    init_simple_test("D_C_BFu0c");
    static STRUCT_IF_C D_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_C_BFu0c)");
    check_field_offset(lv, v1, 0, "D_C_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_C_BFu0c, D_C_BFu0c)
//============================================================================


struct  D_C_BFu0i  {
  double v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 D_C_BFu0i) C1{ FL Fc Fi:0}



static void Test_D_C_BFu0i()
{
  {
    init_simple_test("D_C_BFu0i");
    static STRUCT_IF_C D_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_C_BFu0i)");
    check_field_offset(lv, v1, 0, "D_C_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_C_BFu0i, D_C_BFu0i)
//============================================================================


struct  D_C_BFu0ll  {
  double v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 D_C_BFu0ll) C1{ FL Fc FL:0}



static void Test_D_C_BFu0ll()
{
  {
    init_simple_test("D_C_BFu0ll");
    static STRUCT_IF_C D_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_C_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_C_BFu0ll, D_C_BFu0ll)
//============================================================================


struct  D_C_BFu0s  {
  double v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 D_C_BFu0s) C1{ FL Fc Fs:0}



static void Test_D_C_BFu0s()
{
  {
    init_simple_test("D_C_BFu0s");
    static STRUCT_IF_C D_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_C_BFu0s)");
    check_field_offset(lv, v1, 0, "D_C_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_C_BFu0s, D_C_BFu0s)
//============================================================================


struct  D_D_BFu0c  {
  double v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 D_D_BFu0c) C1{ FL[2] Fc:0}



static void Test_D_D_BFu0c()
{
  {
    init_simple_test("D_D_BFu0c");
    static STRUCT_IF_C D_D_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(D_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_D_BFu0c)");
    check_field_offset(lv, v1, 0, "D_D_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_D_BFu0c, D_D_BFu0c)
//============================================================================


struct  D_D_BFu0i  {
  double v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 D_D_BFu0i) C1{ FL[2] Fi:0}



static void Test_D_D_BFu0i()
{
  {
    init_simple_test("D_D_BFu0i");
    static STRUCT_IF_C D_D_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(D_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_D_BFu0i)");
    check_field_offset(lv, v1, 0, "D_D_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_D_BFu0i, D_D_BFu0i)
//============================================================================


struct  D_D_BFu0ll  {
  double v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 D_D_BFu0ll) C1{ FL[2] FL:0}



static void Test_D_D_BFu0ll()
{
  {
    init_simple_test("D_D_BFu0ll");
    static STRUCT_IF_C D_D_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(D_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_D_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_D_BFu0ll, D_D_BFu0ll)
//============================================================================


struct  D_D_BFu0s  {
  double v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 D_D_BFu0s) C1{ FL[2] Fs:0}



static void Test_D_D_BFu0s()
{
  {
    init_simple_test("D_D_BFu0s");
    static STRUCT_IF_C D_D_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(D_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_D_BFu0s)");
    check_field_offset(lv, v1, 0, "D_D_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_D_BFu0s, D_D_BFu0s)
//============================================================================


struct  D_F_BFu0c  {
  double v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 D_F_BFu0c) C1{ FL Fi Fc:0}



static void Test_D_F_BFu0c()
{
  {
    init_simple_test("D_F_BFu0c");
    static STRUCT_IF_C D_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_F_BFu0c)");
    check_field_offset(lv, v1, 0, "D_F_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_F_BFu0c, D_F_BFu0c)
//============================================================================


struct  D_F_BFu0i  {
  double v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 D_F_BFu0i) C1{ FL Fi Fi:0}



static void Test_D_F_BFu0i()
{
  {
    init_simple_test("D_F_BFu0i");
    static STRUCT_IF_C D_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_F_BFu0i)");
    check_field_offset(lv, v1, 0, "D_F_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_F_BFu0i, D_F_BFu0i)
//============================================================================


struct  D_F_BFu0ll  {
  double v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 D_F_BFu0ll) C1{ FL Fi FL:0}



static void Test_D_F_BFu0ll()
{
  {
    init_simple_test("D_F_BFu0ll");
    static STRUCT_IF_C D_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_F_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_F_BFu0ll, D_F_BFu0ll)
//============================================================================


struct  D_F_BFu0s  {
  double v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 D_F_BFu0s) C1{ FL Fi Fs:0}



static void Test_D_F_BFu0s()
{
  {
    init_simple_test("D_F_BFu0s");
    static STRUCT_IF_C D_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_F_BFu0s)");
    check_field_offset(lv, v1, 0, "D_F_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_F_BFu0s, D_F_BFu0s)
//============================================================================


struct  D_I_BFu0c  {
  double v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 D_I_BFu0c) C1{ FL Fi Fc:0}



static void Test_D_I_BFu0c()
{
  {
    init_simple_test("D_I_BFu0c");
    static STRUCT_IF_C D_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_I_BFu0c)");
    check_field_offset(lv, v1, 0, "D_I_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_I_BFu0c, D_I_BFu0c)
//============================================================================


struct  D_I_BFu0i  {
  double v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 D_I_BFu0i) C1{ FL Fi Fi:0}



static void Test_D_I_BFu0i()
{
  {
    init_simple_test("D_I_BFu0i");
    static STRUCT_IF_C D_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_I_BFu0i)");
    check_field_offset(lv, v1, 0, "D_I_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_I_BFu0i, D_I_BFu0i)
//============================================================================


struct  D_I_BFu0ll  {
  double v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 D_I_BFu0ll) C1{ FL Fi FL:0}



static void Test_D_I_BFu0ll()
{
  {
    init_simple_test("D_I_BFu0ll");
    static STRUCT_IF_C D_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_I_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_I_BFu0ll, D_I_BFu0ll)
//============================================================================


struct  D_I_BFu0s  {
  double v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 D_I_BFu0s) C1{ FL Fi Fs:0}



static void Test_D_I_BFu0s()
{
  {
    init_simple_test("D_I_BFu0s");
    static STRUCT_IF_C D_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_I_BFu0s)");
    check_field_offset(lv, v1, 0, "D_I_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_I_BFu0s, D_I_BFu0s)
//============================================================================


struct  D_Ip_BFu0c  {
  double v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 D_Ip_BFu0c) C1{ FL Fp Fc:0}



static void Test_D_Ip_BFu0c()
{
  {
    init_simple_test("D_Ip_BFu0c");
    static STRUCT_IF_C D_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "D_Ip_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ip_BFu0c, D_Ip_BFu0c)
//============================================================================


struct  D_Ip_BFu0i  {
  double v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 D_Ip_BFu0i) C1{ FL Fp Fi:0}



static void Test_D_Ip_BFu0i()
{
  {
    init_simple_test("D_Ip_BFu0i");
    static STRUCT_IF_C D_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "D_Ip_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ip_BFu0i, D_Ip_BFu0i)
//============================================================================


struct  D_Ip_BFu0ll  {
  double v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 D_Ip_BFu0ll) C1{ FL Fp FL:0}



static void Test_D_Ip_BFu0ll()
{
  {
    init_simple_test("D_Ip_BFu0ll");
    static STRUCT_IF_C D_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ip_BFu0ll, D_Ip_BFu0ll)
//============================================================================


struct  D_Ip_BFu0s  {
  double v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 D_Ip_BFu0s) C1{ FL Fp Fs:0}



static void Test_D_Ip_BFu0s()
{
  {
    init_simple_test("D_Ip_BFu0s");
    static STRUCT_IF_C D_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "D_Ip_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ip_BFu0s, D_Ip_BFu0s)
//============================================================================


struct  D_L_BFu0c  {
  double v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 D_L_BFu0c) C1{ FL[2] Fc:0}



static void Test_D_L_BFu0c()
{
  {
    init_simple_test("D_L_BFu0c");
    static STRUCT_IF_C D_L_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(D_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_L_BFu0c)");
    check_field_offset(lv, v1, 0, "D_L_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_L_BFu0c, D_L_BFu0c)
//============================================================================


struct  D_L_BFu0i  {
  double v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 D_L_BFu0i) C1{ FL[2] Fi:0}



static void Test_D_L_BFu0i()
{
  {
    init_simple_test("D_L_BFu0i");
    static STRUCT_IF_C D_L_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(D_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_L_BFu0i)");
    check_field_offset(lv, v1, 0, "D_L_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_L_BFu0i, D_L_BFu0i)
//============================================================================


struct  D_L_BFu0ll  {
  double v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 D_L_BFu0ll) C1{ FL[2] FL:0}



static void Test_D_L_BFu0ll()
{
  {
    init_simple_test("D_L_BFu0ll");
    static STRUCT_IF_C D_L_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(D_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_L_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_L_BFu0ll, D_L_BFu0ll)
//============================================================================


struct  D_L_BFu0s  {
  double v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 D_L_BFu0s) C1{ FL[2] Fs:0}



static void Test_D_L_BFu0s()
{
  {
    init_simple_test("D_L_BFu0s");
    static STRUCT_IF_C D_L_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(D_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_L_BFu0s)");
    check_field_offset(lv, v1, 0, "D_L_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_L_BFu0s, D_L_BFu0s)
//============================================================================


struct  D_S_BFu0c  {
  double v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 D_S_BFu0c) C1{ FL Fs Fc:0}



static void Test_D_S_BFu0c()
{
  {
    init_simple_test("D_S_BFu0c");
    static STRUCT_IF_C D_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_S_BFu0c)");
    check_field_offset(lv, v1, 0, "D_S_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_S_BFu0c, D_S_BFu0c)
//============================================================================


struct  D_S_BFu0i  {
  double v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 D_S_BFu0i) C1{ FL Fs Fi:0}



static void Test_D_S_BFu0i()
{
  {
    init_simple_test("D_S_BFu0i");
    static STRUCT_IF_C D_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_S_BFu0i)");
    check_field_offset(lv, v1, 0, "D_S_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_S_BFu0i, D_S_BFu0i)
//============================================================================


struct  D_S_BFu0ll  {
  double v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 D_S_BFu0ll) C1{ FL Fs FL:0}



static void Test_D_S_BFu0ll()
{
  {
    init_simple_test("D_S_BFu0ll");
    static STRUCT_IF_C D_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_S_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_S_BFu0ll, D_S_BFu0ll)
//============================================================================


struct  D_S_BFu0s  {
  double v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 D_S_BFu0s) C1{ FL Fs Fs:0}



static void Test_D_S_BFu0s()
{
  {
    init_simple_test("D_S_BFu0s");
    static STRUCT_IF_C D_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_S_BFu0s)");
    check_field_offset(lv, v1, 0, "D_S_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_S_BFu0s, D_S_BFu0s)
//============================================================================


struct  D_Uc_BFu0c  {
  double v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 D_Uc_BFu0c) C1{ FL Fc Fc:0}



static void Test_D_Uc_BFu0c()
{
  {
    init_simple_test("D_Uc_BFu0c");
    static STRUCT_IF_C D_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "D_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Uc_BFu0c, D_Uc_BFu0c)
//============================================================================


struct  D_Uc_BFu0i  {
  double v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 D_Uc_BFu0i) C1{ FL Fc Fi:0}



static void Test_D_Uc_BFu0i()
{
  {
    init_simple_test("D_Uc_BFu0i");
    static STRUCT_IF_C D_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "D_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Uc_BFu0i, D_Uc_BFu0i)
//============================================================================


struct  D_Uc_BFu0ll  {
  double v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 D_Uc_BFu0ll) C1{ FL Fc FL:0}



static void Test_D_Uc_BFu0ll()
{
  {
    init_simple_test("D_Uc_BFu0ll");
    static STRUCT_IF_C D_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Uc_BFu0ll, D_Uc_BFu0ll)
//============================================================================


struct  D_Uc_BFu0s  {
  double v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 D_Uc_BFu0s) C1{ FL Fc Fs:0}



static void Test_D_Uc_BFu0s()
{
  {
    init_simple_test("D_Uc_BFu0s");
    static STRUCT_IF_C D_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "D_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Uc_BFu0s, D_Uc_BFu0s)
//============================================================================


struct  D_Ui_BFu0c  {
  double v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 D_Ui_BFu0c) C1{ FL Fi Fc:0}



static void Test_D_Ui_BFu0c()
{
  {
    init_simple_test("D_Ui_BFu0c");
    static STRUCT_IF_C D_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "D_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ui_BFu0c, D_Ui_BFu0c)
//============================================================================


struct  D_Ui_BFu0i  {
  double v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 D_Ui_BFu0i) C1{ FL Fi Fi:0}



static void Test_D_Ui_BFu0i()
{
  {
    init_simple_test("D_Ui_BFu0i");
    static STRUCT_IF_C D_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "D_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ui_BFu0i, D_Ui_BFu0i)
//============================================================================


struct  D_Ui_BFu0ll  {
  double v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 D_Ui_BFu0ll) C1{ FL Fi FL:0}



static void Test_D_Ui_BFu0ll()
{
  {
    init_simple_test("D_Ui_BFu0ll");
    static STRUCT_IF_C D_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ui_BFu0ll, D_Ui_BFu0ll)
//============================================================================


struct  D_Ui_BFu0s  {
  double v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 D_Ui_BFu0s) C1{ FL Fi Fs:0}



static void Test_D_Ui_BFu0s()
{
  {
    init_simple_test("D_Ui_BFu0s");
    static STRUCT_IF_C D_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "D_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ui_BFu0s, D_Ui_BFu0s)
//============================================================================


struct  D_Ul_BFu0c  {
  double v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 D_Ul_BFu0c) C1{ FL[2] Fc:0}



static void Test_D_Ul_BFu0c()
{
  {
    init_simple_test("D_Ul_BFu0c");
    static STRUCT_IF_C D_Ul_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(D_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "D_Ul_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ul_BFu0c, D_Ul_BFu0c)
//============================================================================


struct  D_Ul_BFu0i  {
  double v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 D_Ul_BFu0i) C1{ FL[2] Fi:0}



static void Test_D_Ul_BFu0i()
{
  {
    init_simple_test("D_Ul_BFu0i");
    static STRUCT_IF_C D_Ul_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(D_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "D_Ul_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ul_BFu0i, D_Ul_BFu0i)
//============================================================================


struct  D_Ul_BFu0ll  {
  double v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 D_Ul_BFu0ll) C1{ FL[2] FL:0}



static void Test_D_Ul_BFu0ll()
{
  {
    init_simple_test("D_Ul_BFu0ll");
    static STRUCT_IF_C D_Ul_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(D_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ul_BFu0ll, D_Ul_BFu0ll)
//============================================================================


struct  D_Ul_BFu0s  {
  double v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 D_Ul_BFu0s) C1{ FL[2] Fs:0}



static void Test_D_Ul_BFu0s()
{
  {
    init_simple_test("D_Ul_BFu0s");
    static STRUCT_IF_C D_Ul_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(D_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "D_Ul_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Ul_BFu0s, D_Ul_BFu0s)
//============================================================================


struct  D_Us_BFu0c  {
  double v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 D_Us_BFu0c) C1{ FL Fs Fc:0}



static void Test_D_Us_BFu0c()
{
  {
    init_simple_test("D_Us_BFu0c");
    static STRUCT_IF_C D_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "D_Us_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Us_BFu0c, D_Us_BFu0c)
//============================================================================


struct  D_Us_BFu0i  {
  double v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 D_Us_BFu0i) C1{ FL Fs Fi:0}



static void Test_D_Us_BFu0i()
{
  {
    init_simple_test("D_Us_BFu0i");
    static STRUCT_IF_C D_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "D_Us_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Us_BFu0i, D_Us_BFu0i)
//============================================================================


struct  D_Us_BFu0ll  {
  double v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 D_Us_BFu0ll) C1{ FL Fs FL:0}



static void Test_D_Us_BFu0ll()
{
  {
    init_simple_test("D_Us_BFu0ll");
    static STRUCT_IF_C D_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Us_BFu0ll, D_Us_BFu0ll)
//============================================================================


struct  D_Us_BFu0s  {
  double v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 D_Us_BFu0s) C1{ FL Fs Fs:0}



static void Test_D_Us_BFu0s()
{
  {
    init_simple_test("D_Us_BFu0s");
    static STRUCT_IF_C D_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "D_Us_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Us_BFu0s, D_Us_BFu0s)
//============================================================================


struct  D_Vp_BFu0c  {
  double v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 D_Vp_BFu0c) C1{ FL Fp Fc:0}



static void Test_D_Vp_BFu0c()
{
  {
    init_simple_test("D_Vp_BFu0c");
    static STRUCT_IF_C D_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "D_Vp_BFu0c.v1");
    check_field_offset(lv, v2, 8, "D_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Vp_BFu0c, D_Vp_BFu0c)
//============================================================================


struct  D_Vp_BFu0i  {
  double v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 D_Vp_BFu0i) C1{ FL Fp Fi:0}



static void Test_D_Vp_BFu0i()
{
  {
    init_simple_test("D_Vp_BFu0i");
    static STRUCT_IF_C D_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "D_Vp_BFu0i.v1");
    check_field_offset(lv, v2, 8, "D_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Vp_BFu0i, D_Vp_BFu0i)
//============================================================================


struct  D_Vp_BFu0ll  {
  double v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 D_Vp_BFu0ll) C1{ FL Fp FL:0}



static void Test_D_Vp_BFu0ll()
{
  {
    init_simple_test("D_Vp_BFu0ll");
    static STRUCT_IF_C D_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "D_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, 8, "D_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Vp_BFu0ll, D_Vp_BFu0ll)
//============================================================================


struct  D_Vp_BFu0s  {
  double v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 D_Vp_BFu0s) C1{ FL Fp Fs:0}



static void Test_D_Vp_BFu0s()
{
  {
    init_simple_test("D_Vp_BFu0s");
    static STRUCT_IF_C D_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(D_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(D_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "D_Vp_BFu0s.v1");
    check_field_offset(lv, v2, 8, "D_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_D_Vp_BFu0s, D_Vp_BFu0s)
//============================================================================


struct  F_BFu0c  {
  float v1;
  unsigned char  :0;
};
//SIG(1 F_BFu0c) C1{ Fi Fc:0}



static void Test_F_BFu0c()
{
  {
    init_simple_test("F_BFu0c");
    static STRUCT_IF_C F_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c, F_BFu0c)
//============================================================================


struct  F_BFu0c_BFu0c  {
  float v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 F_BFu0c_BFu0c) C1{ Fi Fc:0 Fc:0}



static void Test_F_BFu0c_BFu0c()
{
  {
    init_simple_test("F_BFu0c_BFu0c");
    static STRUCT_IF_C F_BFu0c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu0c, F_BFu0c_BFu0c)
//============================================================================


struct  F_BFu0c_BFu0i  {
  float v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 F_BFu0c_BFu0i) C1{ Fi Fc:0 Fi:0}



static void Test_F_BFu0c_BFu0i()
{
  {
    init_simple_test("F_BFu0c_BFu0i");
    static STRUCT_IF_C F_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu0i, F_BFu0c_BFu0i)
//============================================================================


struct  F_BFu0c_BFu0ll  {
  float v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 F_BFu0c_BFu0ll) C1{ Fi Fc:0 FL:0}



static void Test_F_BFu0c_BFu0ll()
{
  {
    init_simple_test("F_BFu0c_BFu0ll");
    static STRUCT_IF_C F_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu0ll, F_BFu0c_BFu0ll)
//============================================================================


struct  F_BFu0c_BFu0s  {
  float v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 F_BFu0c_BFu0s) C1{ Fi Fc:0 Fs:0}



static void Test_F_BFu0c_BFu0s()
{
  {
    init_simple_test("F_BFu0c_BFu0s");
    static STRUCT_IF_C F_BFu0c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu0s, F_BFu0c_BFu0s)
//============================================================================


struct  F_BFu0c_BFu15i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 F_BFu0c_BFu15i) C1{ Fi Fc:0 Fi:15}



static void Test_F_BFu0c_BFu15i()
{
  {
    init_simple_test("F_BFu0c_BFu15i");
    static STRUCT_IF_C F_BFu0c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu15i, F_BFu0c_BFu15i)
//============================================================================


struct  F_BFu0c_BFu15ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 F_BFu0c_BFu15ll) C1{ Fi Fc:0 FL:15}



static void Test_F_BFu0c_BFu15ll()
{
  {
    init_simple_test("F_BFu0c_BFu15ll");
    static STRUCT_IF_C F_BFu0c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu15ll, F_BFu0c_BFu15ll)
//============================================================================


struct  F_BFu0c_BFu15s  {
  float v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 F_BFu0c_BFu15s) C1{ Fi Fc:0 Fs:15}



static void Test_F_BFu0c_BFu15s()
{
  {
    init_simple_test("F_BFu0c_BFu15s");
    static STRUCT_IF_C F_BFu0c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu15s, F_BFu0c_BFu15s)
//============================================================================


struct  F_BFu0c_BFu16i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 F_BFu0c_BFu16i) C1{ Fi Fc:0 Fi:16}



static void Test_F_BFu0c_BFu16i()
{
  {
    init_simple_test("F_BFu0c_BFu16i");
    static STRUCT_IF_C F_BFu0c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu16i, F_BFu0c_BFu16i)
//============================================================================


struct  F_BFu0c_BFu16ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 F_BFu0c_BFu16ll) C1{ Fi Fc:0 FL:16}



static void Test_F_BFu0c_BFu16ll()
{
  {
    init_simple_test("F_BFu0c_BFu16ll");
    static STRUCT_IF_C F_BFu0c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu16ll, F_BFu0c_BFu16ll)
//============================================================================


struct  F_BFu0c_BFu16s  {
  float v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 F_BFu0c_BFu16s) C1{ Fi Fc:0 Fs:16}



static void Test_F_BFu0c_BFu16s()
{
  {
    init_simple_test("F_BFu0c_BFu16s");
    static STRUCT_IF_C F_BFu0c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu16s, F_BFu0c_BFu16s)
//============================================================================


struct  F_BFu0c_BFu17i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 F_BFu0c_BFu17i) C1{ Fi Fc:0 Fi:17}



static void Test_F_BFu0c_BFu17i()
{
  {
    init_simple_test("F_BFu0c_BFu17i");
    static STRUCT_IF_C F_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu17i, F_BFu0c_BFu17i)
//============================================================================


struct  F_BFu0c_BFu17ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 F_BFu0c_BFu17ll) C1{ Fi Fc:0 FL:17}



static void Test_F_BFu0c_BFu17ll()
{
  {
    init_simple_test("F_BFu0c_BFu17ll");
    static STRUCT_IF_C F_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu17ll, F_BFu0c_BFu17ll)
//============================================================================


struct  F_BFu0c_BFu1c  {
  float v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 F_BFu0c_BFu1c) C1{ Fi Fc:0 Fc:1}



static void Test_F_BFu0c_BFu1c()
{
  {
    init_simple_test("F_BFu0c_BFu1c");
    static STRUCT_IF_C F_BFu0c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu1c, F_BFu0c_BFu1c)
//============================================================================


struct  F_BFu0c_BFu1i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 F_BFu0c_BFu1i) C1{ Fi Fc:0 Fi:1}



static void Test_F_BFu0c_BFu1i()
{
  {
    init_simple_test("F_BFu0c_BFu1i");
    static STRUCT_IF_C F_BFu0c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu1i, F_BFu0c_BFu1i)
//============================================================================


struct  F_BFu0c_BFu1ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 F_BFu0c_BFu1ll) C1{ Fi Fc:0 FL:1}



static void Test_F_BFu0c_BFu1ll()
{
  {
    init_simple_test("F_BFu0c_BFu1ll");
    static STRUCT_IF_C F_BFu0c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu1ll, F_BFu0c_BFu1ll)
//============================================================================


struct  F_BFu0c_BFu1s  {
  float v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 F_BFu0c_BFu1s) C1{ Fi Fc:0 Fs:1}



static void Test_F_BFu0c_BFu1s()
{
  {
    init_simple_test("F_BFu0c_BFu1s");
    static STRUCT_IF_C F_BFu0c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu1s, F_BFu0c_BFu1s)
//============================================================================


struct  F_BFu0c_BFu31i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 F_BFu0c_BFu31i) C1{ Fi Fc:0 Fi:31}



static void Test_F_BFu0c_BFu31i()
{
  {
    init_simple_test("F_BFu0c_BFu31i");
    static STRUCT_IF_C F_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu31i, F_BFu0c_BFu31i)
//============================================================================


struct  F_BFu0c_BFu31ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 F_BFu0c_BFu31ll) C1{ Fi Fc:0 FL:31}



static void Test_F_BFu0c_BFu31ll()
{
  {
    init_simple_test("F_BFu0c_BFu31ll");
    static STRUCT_IF_C F_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu31ll, F_BFu0c_BFu31ll)
//============================================================================


struct  F_BFu0c_BFu32i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 F_BFu0c_BFu32i) C1{ Fi Fc:0 Fi:32}



static void Test_F_BFu0c_BFu32i()
{
  {
    init_simple_test("F_BFu0c_BFu32i");
    static STRUCT_IF_C F_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu32i, F_BFu0c_BFu32i)
//============================================================================


struct  F_BFu0c_BFu32ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 F_BFu0c_BFu32ll) C1{ Fi Fc:0 FL:32}



static void Test_F_BFu0c_BFu32ll()
{
  {
    init_simple_test("F_BFu0c_BFu32ll");
    static STRUCT_IF_C F_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu32ll, F_BFu0c_BFu32ll)
//============================================================================


struct  F_BFu0c_BFu33  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 F_BFu0c_BFu33) C1{ Fi Fc:0 FL:33}



static void Test_F_BFu0c_BFu33()
{
  {
    init_simple_test("F_BFu0c_BFu33");
    static STRUCT_IF_C F_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu33, F_BFu0c_BFu33)
//============================================================================


struct  F_BFu0c_BFu7c  {
  float v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 F_BFu0c_BFu7c) C1{ Fi Fc:0 Fc:7}



static void Test_F_BFu0c_BFu7c()
{
  {
    init_simple_test("F_BFu0c_BFu7c");
    static STRUCT_IF_C F_BFu0c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu7c, F_BFu0c_BFu7c)
//============================================================================


struct  F_BFu0c_BFu7i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 F_BFu0c_BFu7i) C1{ Fi Fc:0 Fi:7}



static void Test_F_BFu0c_BFu7i()
{
  {
    init_simple_test("F_BFu0c_BFu7i");
    static STRUCT_IF_C F_BFu0c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu7i, F_BFu0c_BFu7i)
//============================================================================


struct  F_BFu0c_BFu7ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 F_BFu0c_BFu7ll) C1{ Fi Fc:0 FL:7}



static void Test_F_BFu0c_BFu7ll()
{
  {
    init_simple_test("F_BFu0c_BFu7ll");
    static STRUCT_IF_C F_BFu0c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu7ll, F_BFu0c_BFu7ll)
//============================================================================


struct  F_BFu0c_BFu7s  {
  float v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 F_BFu0c_BFu7s) C1{ Fi Fc:0 Fs:7}



static void Test_F_BFu0c_BFu7s()
{
  {
    init_simple_test("F_BFu0c_BFu7s");
    static STRUCT_IF_C F_BFu0c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu7s, F_BFu0c_BFu7s)
//============================================================================


struct  F_BFu0c_BFu8c  {
  float v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 F_BFu0c_BFu8c) C1{ Fi Fc:0 Fc:8}



static void Test_F_BFu0c_BFu8c()
{
  {
    init_simple_test("F_BFu0c_BFu8c");
    static STRUCT_IF_C F_BFu0c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu8c, F_BFu0c_BFu8c)
//============================================================================


struct  F_BFu0c_BFu8i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 F_BFu0c_BFu8i) C1{ Fi Fc:0 Fi:8}



static void Test_F_BFu0c_BFu8i()
{
  {
    init_simple_test("F_BFu0c_BFu8i");
    static STRUCT_IF_C F_BFu0c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu8i, F_BFu0c_BFu8i)
//============================================================================


struct  F_BFu0c_BFu8ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 F_BFu0c_BFu8ll) C1{ Fi Fc:0 FL:8}



static void Test_F_BFu0c_BFu8ll()
{
  {
    init_simple_test("F_BFu0c_BFu8ll");
    static STRUCT_IF_C F_BFu0c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu8ll, F_BFu0c_BFu8ll)
//============================================================================


struct  F_BFu0c_BFu8s  {
  float v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 F_BFu0c_BFu8s) C1{ Fi Fc:0 Fs:8}



static void Test_F_BFu0c_BFu8s()
{
  {
    init_simple_test("F_BFu0c_BFu8s");
    static STRUCT_IF_C F_BFu0c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu8s, F_BFu0c_BFu8s)
//============================================================================


struct  F_BFu0c_BFu9i  {
  float v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 F_BFu0c_BFu9i) C1{ Fi Fc:0 Fi:9}



static void Test_F_BFu0c_BFu9i()
{
  {
    init_simple_test("F_BFu0c_BFu9i");
    static STRUCT_IF_C F_BFu0c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu9i, F_BFu0c_BFu9i)
//============================================================================


struct  F_BFu0c_BFu9ll  {
  float v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 F_BFu0c_BFu9ll) C1{ Fi Fc:0 FL:9}



static void Test_F_BFu0c_BFu9ll()
{
  {
    init_simple_test("F_BFu0c_BFu9ll");
    static STRUCT_IF_C F_BFu0c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu9ll, F_BFu0c_BFu9ll)
//============================================================================


struct  F_BFu0c_BFu9s  {
  float v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 F_BFu0c_BFu9s) C1{ Fi Fc:0 Fs:9}



static void Test_F_BFu0c_BFu9s()
{
  {
    init_simple_test("F_BFu0c_BFu9s");
    static STRUCT_IF_C F_BFu0c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "F_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_BFu9s, F_BFu0c_BFu9s)
//============================================================================


struct  F_BFu0c_C  {
  float v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 F_BFu0c_C) C1{ Fi Fc:0 Fc}



static void Test_F_BFu0c_C()
{
  {
    init_simple_test("F_BFu0c_C");
    static STRUCT_IF_C F_BFu0c_C lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_C)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_C)");
    check_field_offset(lv, v1, 0, "F_BFu0c_C.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_C, F_BFu0c_C)
//============================================================================


struct  F_BFu0c_D  {
  float v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 F_BFu0c_D) C1{ Fi Fc:0 FL}



static void Test_F_BFu0c_D()
{
  {
    init_simple_test("F_BFu0c_D");
    static STRUCT_IF_C F_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_D)");
    check_field_offset(lv, v1, 0, "F_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_D, F_BFu0c_D)
//============================================================================


struct  F_BFu0c_F  {
  float v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 F_BFu0c_F) C1{ Fi Fc:0 Fi}



static void Test_F_BFu0c_F()
{
  {
    init_simple_test("F_BFu0c_F");
    static STRUCT_IF_C F_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_F)");
    check_field_offset(lv, v1, 0, "F_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_F, F_BFu0c_F)
//============================================================================


struct  F_BFu0c_I  {
  float v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 F_BFu0c_I) C1{ Fi Fc:0 Fi}



static void Test_F_BFu0c_I()
{
  {
    init_simple_test("F_BFu0c_I");
    static STRUCT_IF_C F_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_I)");
    check_field_offset(lv, v1, 0, "F_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_I, F_BFu0c_I)
//============================================================================


struct  F_BFu0c_Ip  {
  float v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 F_BFu0c_Ip) C1{ Fi Fc:0 Fp}



static void Test_F_BFu0c_Ip()
{
  {
    init_simple_test("F_BFu0c_Ip");
    static STRUCT_IF_C F_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "F_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_Ip, F_BFu0c_Ip)
//============================================================================


struct  F_BFu0c_L  {
  float v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 F_BFu0c_L) C1{ Fi Fc:0 FL}



static void Test_F_BFu0c_L()
{
  {
    init_simple_test("F_BFu0c_L");
    static STRUCT_IF_C F_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_L)");
    check_field_offset(lv, v1, 0, "F_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_L, F_BFu0c_L)
//============================================================================


struct  F_BFu0c_S  {
  float v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 F_BFu0c_S) C1{ Fi Fc:0 Fs}



static void Test_F_BFu0c_S()
{
  {
    init_simple_test("F_BFu0c_S");
    static STRUCT_IF_C F_BFu0c_S lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_S)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_S)");
    check_field_offset(lv, v1, 0, "F_BFu0c_S.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_S, F_BFu0c_S)
//============================================================================


struct  F_BFu0c_Uc  {
  float v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 F_BFu0c_Uc) C1{ Fi Fc:0 Fc}



static void Test_F_BFu0c_Uc()
{
  {
    init_simple_test("F_BFu0c_Uc");
    static STRUCT_IF_C F_BFu0c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "F_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_Uc, F_BFu0c_Uc)
//============================================================================


struct  F_BFu0c_Ui  {
  float v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 F_BFu0c_Ui) C1{ Fi Fc:0 Fi}



static void Test_F_BFu0c_Ui()
{
  {
    init_simple_test("F_BFu0c_Ui");
    static STRUCT_IF_C F_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "F_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_Ui, F_BFu0c_Ui)
//============================================================================


struct  F_BFu0c_Ul  {
  float v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 F_BFu0c_Ul) C1{ Fi Fc:0 FL}



static void Test_F_BFu0c_Ul()
{
  {
    init_simple_test("F_BFu0c_Ul");
    static STRUCT_IF_C F_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "F_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_Ul, F_BFu0c_Ul)
//============================================================================


struct  F_BFu0c_Us  {
  float v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 F_BFu0c_Us) C1{ Fi Fc:0 Fs}



static void Test_F_BFu0c_Us()
{
  {
    init_simple_test("F_BFu0c_Us");
    static STRUCT_IF_C F_BFu0c_Us lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "F_BFu0c_Us.v1");
    check_field_offset(lv, v2, 4, "F_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_Us, F_BFu0c_Us)
//============================================================================


struct  F_BFu0c_Vp  {
  float v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 F_BFu0c_Vp) C1{ Fi Fc:0 Fp}



static void Test_F_BFu0c_Vp()
{
  {
    init_simple_test("F_BFu0c_Vp");
    static STRUCT_IF_C F_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "F_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0c_Vp, F_BFu0c_Vp)
//============================================================================


struct  F_BFu0i  {
  float v1;
  unsigned int  :0;
};
//SIG(1 F_BFu0i) C1{ Fi Fi:0}



static void Test_F_BFu0i()
{
  {
    init_simple_test("F_BFu0i");
    static STRUCT_IF_C F_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i, F_BFu0i)
//============================================================================


struct  F_BFu0i_BFu0c  {
  float v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 F_BFu0i_BFu0c) C1{ Fi Fi:0 Fc:0}



static void Test_F_BFu0i_BFu0c()
{
  {
    init_simple_test("F_BFu0i_BFu0c");
    static STRUCT_IF_C F_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu0c, F_BFu0i_BFu0c)
//============================================================================


struct  F_BFu0i_BFu0i  {
  float v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 F_BFu0i_BFu0i) C1{ Fi Fi:0 Fi:0}



static void Test_F_BFu0i_BFu0i()
{
  {
    init_simple_test("F_BFu0i_BFu0i");
    static STRUCT_IF_C F_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu0i, F_BFu0i_BFu0i)
//============================================================================


struct  F_BFu0i_BFu0ll  {
  float v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 F_BFu0i_BFu0ll) C1{ Fi Fi:0 FL:0}



static void Test_F_BFu0i_BFu0ll()
{
  {
    init_simple_test("F_BFu0i_BFu0ll");
    static STRUCT_IF_C F_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu0ll, F_BFu0i_BFu0ll)
//============================================================================


struct  F_BFu0i_BFu0s  {
  float v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 F_BFu0i_BFu0s) C1{ Fi Fi:0 Fs:0}



static void Test_F_BFu0i_BFu0s()
{
  {
    init_simple_test("F_BFu0i_BFu0s");
    static STRUCT_IF_C F_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu0s, F_BFu0i_BFu0s)
//============================================================================


struct  F_BFu0i_BFu15i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 F_BFu0i_BFu15i) C1{ Fi Fi:0 Fi:15}



static void Test_F_BFu0i_BFu15i()
{
  {
    init_simple_test("F_BFu0i_BFu15i");
    static STRUCT_IF_C F_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu15i, F_BFu0i_BFu15i)
//============================================================================


struct  F_BFu0i_BFu15ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 F_BFu0i_BFu15ll) C1{ Fi Fi:0 FL:15}



static void Test_F_BFu0i_BFu15ll()
{
  {
    init_simple_test("F_BFu0i_BFu15ll");
    static STRUCT_IF_C F_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu15ll, F_BFu0i_BFu15ll)
//============================================================================


struct  F_BFu0i_BFu15s  {
  float v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 F_BFu0i_BFu15s) C1{ Fi Fi:0 Fs:15}



static void Test_F_BFu0i_BFu15s()
{
  {
    init_simple_test("F_BFu0i_BFu15s");
    static STRUCT_IF_C F_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu15s, F_BFu0i_BFu15s)
//============================================================================


struct  F_BFu0i_BFu16i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 F_BFu0i_BFu16i) C1{ Fi Fi:0 Fi:16}



static void Test_F_BFu0i_BFu16i()
{
  {
    init_simple_test("F_BFu0i_BFu16i");
    static STRUCT_IF_C F_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu16i, F_BFu0i_BFu16i)
//============================================================================


struct  F_BFu0i_BFu16ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 F_BFu0i_BFu16ll) C1{ Fi Fi:0 FL:16}



static void Test_F_BFu0i_BFu16ll()
{
  {
    init_simple_test("F_BFu0i_BFu16ll");
    static STRUCT_IF_C F_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu16ll, F_BFu0i_BFu16ll)
//============================================================================


struct  F_BFu0i_BFu16s  {
  float v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 F_BFu0i_BFu16s) C1{ Fi Fi:0 Fs:16}



static void Test_F_BFu0i_BFu16s()
{
  {
    init_simple_test("F_BFu0i_BFu16s");
    static STRUCT_IF_C F_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu16s, F_BFu0i_BFu16s)
//============================================================================


struct  F_BFu0i_BFu17i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 F_BFu0i_BFu17i) C1{ Fi Fi:0 Fi:17}



static void Test_F_BFu0i_BFu17i()
{
  {
    init_simple_test("F_BFu0i_BFu17i");
    static STRUCT_IF_C F_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu17i, F_BFu0i_BFu17i)
//============================================================================


struct  F_BFu0i_BFu17ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 F_BFu0i_BFu17ll) C1{ Fi Fi:0 FL:17}



static void Test_F_BFu0i_BFu17ll()
{
  {
    init_simple_test("F_BFu0i_BFu17ll");
    static STRUCT_IF_C F_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu17ll, F_BFu0i_BFu17ll)
//============================================================================


struct  F_BFu0i_BFu1c  {
  float v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 F_BFu0i_BFu1c) C1{ Fi Fi:0 Fc:1}



static void Test_F_BFu0i_BFu1c()
{
  {
    init_simple_test("F_BFu0i_BFu1c");
    static STRUCT_IF_C F_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu1c, F_BFu0i_BFu1c)
//============================================================================


struct  F_BFu0i_BFu1i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 F_BFu0i_BFu1i) C1{ Fi Fi:0 Fi:1}



static void Test_F_BFu0i_BFu1i()
{
  {
    init_simple_test("F_BFu0i_BFu1i");
    static STRUCT_IF_C F_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu1i, F_BFu0i_BFu1i)
//============================================================================


struct  F_BFu0i_BFu1ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 F_BFu0i_BFu1ll) C1{ Fi Fi:0 FL:1}



static void Test_F_BFu0i_BFu1ll()
{
  {
    init_simple_test("F_BFu0i_BFu1ll");
    static STRUCT_IF_C F_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu1ll, F_BFu0i_BFu1ll)
//============================================================================


struct  F_BFu0i_BFu1s  {
  float v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 F_BFu0i_BFu1s) C1{ Fi Fi:0 Fs:1}



static void Test_F_BFu0i_BFu1s()
{
  {
    init_simple_test("F_BFu0i_BFu1s");
    static STRUCT_IF_C F_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu1s, F_BFu0i_BFu1s)
//============================================================================


struct  F_BFu0i_BFu31i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 F_BFu0i_BFu31i) C1{ Fi Fi:0 Fi:31}



static void Test_F_BFu0i_BFu31i()
{
  {
    init_simple_test("F_BFu0i_BFu31i");
    static STRUCT_IF_C F_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu31i, F_BFu0i_BFu31i)
//============================================================================


struct  F_BFu0i_BFu31ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 F_BFu0i_BFu31ll) C1{ Fi Fi:0 FL:31}



static void Test_F_BFu0i_BFu31ll()
{
  {
    init_simple_test("F_BFu0i_BFu31ll");
    static STRUCT_IF_C F_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu31ll, F_BFu0i_BFu31ll)
//============================================================================


struct  F_BFu0i_BFu32i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 F_BFu0i_BFu32i) C1{ Fi Fi:0 Fi:32}



static void Test_F_BFu0i_BFu32i()
{
  {
    init_simple_test("F_BFu0i_BFu32i");
    static STRUCT_IF_C F_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu32i, F_BFu0i_BFu32i)
//============================================================================


struct  F_BFu0i_BFu32ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 F_BFu0i_BFu32ll) C1{ Fi Fi:0 FL:32}



static void Test_F_BFu0i_BFu32ll()
{
  {
    init_simple_test("F_BFu0i_BFu32ll");
    static STRUCT_IF_C F_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu32ll, F_BFu0i_BFu32ll)
//============================================================================


struct  F_BFu0i_BFu33  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 F_BFu0i_BFu33) C1{ Fi Fi:0 FL:33}



static void Test_F_BFu0i_BFu33()
{
  {
    init_simple_test("F_BFu0i_BFu33");
    static STRUCT_IF_C F_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu33, F_BFu0i_BFu33)
//============================================================================


struct  F_BFu0i_BFu7c  {
  float v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 F_BFu0i_BFu7c) C1{ Fi Fi:0 Fc:7}



static void Test_F_BFu0i_BFu7c()
{
  {
    init_simple_test("F_BFu0i_BFu7c");
    static STRUCT_IF_C F_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu7c, F_BFu0i_BFu7c)
//============================================================================


struct  F_BFu0i_BFu7i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 F_BFu0i_BFu7i) C1{ Fi Fi:0 Fi:7}



static void Test_F_BFu0i_BFu7i()
{
  {
    init_simple_test("F_BFu0i_BFu7i");
    static STRUCT_IF_C F_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu7i, F_BFu0i_BFu7i)
//============================================================================


struct  F_BFu0i_BFu7ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 F_BFu0i_BFu7ll) C1{ Fi Fi:0 FL:7}



static void Test_F_BFu0i_BFu7ll()
{
  {
    init_simple_test("F_BFu0i_BFu7ll");
    static STRUCT_IF_C F_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu7ll, F_BFu0i_BFu7ll)
//============================================================================


struct  F_BFu0i_BFu7s  {
  float v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 F_BFu0i_BFu7s) C1{ Fi Fi:0 Fs:7}



static void Test_F_BFu0i_BFu7s()
{
  {
    init_simple_test("F_BFu0i_BFu7s");
    static STRUCT_IF_C F_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu7s, F_BFu0i_BFu7s)
//============================================================================


struct  F_BFu0i_BFu8c  {
  float v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 F_BFu0i_BFu8c) C1{ Fi Fi:0 Fc:8}



static void Test_F_BFu0i_BFu8c()
{
  {
    init_simple_test("F_BFu0i_BFu8c");
    static STRUCT_IF_C F_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu8c, F_BFu0i_BFu8c)
//============================================================================


struct  F_BFu0i_BFu8i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 F_BFu0i_BFu8i) C1{ Fi Fi:0 Fi:8}



static void Test_F_BFu0i_BFu8i()
{
  {
    init_simple_test("F_BFu0i_BFu8i");
    static STRUCT_IF_C F_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu8i, F_BFu0i_BFu8i)
//============================================================================


struct  F_BFu0i_BFu8ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 F_BFu0i_BFu8ll) C1{ Fi Fi:0 FL:8}



static void Test_F_BFu0i_BFu8ll()
{
  {
    init_simple_test("F_BFu0i_BFu8ll");
    static STRUCT_IF_C F_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu8ll, F_BFu0i_BFu8ll)
//============================================================================


struct  F_BFu0i_BFu8s  {
  float v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 F_BFu0i_BFu8s) C1{ Fi Fi:0 Fs:8}



static void Test_F_BFu0i_BFu8s()
{
  {
    init_simple_test("F_BFu0i_BFu8s");
    static STRUCT_IF_C F_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu8s, F_BFu0i_BFu8s)
//============================================================================


struct  F_BFu0i_BFu9i  {
  float v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 F_BFu0i_BFu9i) C1{ Fi Fi:0 Fi:9}



static void Test_F_BFu0i_BFu9i()
{
  {
    init_simple_test("F_BFu0i_BFu9i");
    static STRUCT_IF_C F_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu9i, F_BFu0i_BFu9i)
//============================================================================


struct  F_BFu0i_BFu9ll  {
  float v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 F_BFu0i_BFu9ll) C1{ Fi Fi:0 FL:9}



static void Test_F_BFu0i_BFu9ll()
{
  {
    init_simple_test("F_BFu0i_BFu9ll");
    static STRUCT_IF_C F_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu9ll, F_BFu0i_BFu9ll)
//============================================================================


struct  F_BFu0i_BFu9s  {
  float v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 F_BFu0i_BFu9s) C1{ Fi Fi:0 Fs:9}



static void Test_F_BFu0i_BFu9s()
{
  {
    init_simple_test("F_BFu0i_BFu9s");
    static STRUCT_IF_C F_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "F_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_BFu9s, F_BFu0i_BFu9s)
//============================================================================


struct  F_BFu0i_C  {
  float v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 F_BFu0i_C) C1{ Fi Fi:0 Fc}



static void Test_F_BFu0i_C()
{
  {
    init_simple_test("F_BFu0i_C");
    static STRUCT_IF_C F_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_C)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_C)");
    check_field_offset(lv, v1, 0, "F_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_C, F_BFu0i_C)
//============================================================================


struct  F_BFu0i_D  {
  float v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 F_BFu0i_D) C1{ Fi Fi:0 FL}



static void Test_F_BFu0i_D()
{
  {
    init_simple_test("F_BFu0i_D");
    static STRUCT_IF_C F_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_D)");
    check_field_offset(lv, v1, 0, "F_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_D, F_BFu0i_D)
//============================================================================


struct  F_BFu0i_F  {
  float v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 F_BFu0i_F) C1{ Fi Fi:0 Fi}



static void Test_F_BFu0i_F()
{
  {
    init_simple_test("F_BFu0i_F");
    static STRUCT_IF_C F_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_F)");
    check_field_offset(lv, v1, 0, "F_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_F, F_BFu0i_F)
//============================================================================


struct  F_BFu0i_I  {
  float v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 F_BFu0i_I) C1{ Fi Fi:0 Fi}



static void Test_F_BFu0i_I()
{
  {
    init_simple_test("F_BFu0i_I");
    static STRUCT_IF_C F_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_I)");
    check_field_offset(lv, v1, 0, "F_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_I, F_BFu0i_I)
//============================================================================


struct  F_BFu0i_Ip  {
  float v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 F_BFu0i_Ip) C1{ Fi Fi:0 Fp}



static void Test_F_BFu0i_Ip()
{
  {
    init_simple_test("F_BFu0i_Ip");
    static STRUCT_IF_C F_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "F_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_Ip, F_BFu0i_Ip)
//============================================================================


struct  F_BFu0i_L  {
  float v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 F_BFu0i_L) C1{ Fi Fi:0 FL}



static void Test_F_BFu0i_L()
{
  {
    init_simple_test("F_BFu0i_L");
    static STRUCT_IF_C F_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_L)");
    check_field_offset(lv, v1, 0, "F_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_L, F_BFu0i_L)
//============================================================================


struct  F_BFu0i_S  {
  float v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 F_BFu0i_S) C1{ Fi Fi:0 Fs}



static void Test_F_BFu0i_S()
{
  {
    init_simple_test("F_BFu0i_S");
    static STRUCT_IF_C F_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_S)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_S)");
    check_field_offset(lv, v1, 0, "F_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_S, F_BFu0i_S)
//============================================================================


struct  F_BFu0i_Uc  {
  float v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 F_BFu0i_Uc) C1{ Fi Fi:0 Fc}



static void Test_F_BFu0i_Uc()
{
  {
    init_simple_test("F_BFu0i_Uc");
    static STRUCT_IF_C F_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "F_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_Uc, F_BFu0i_Uc)
//============================================================================


struct  F_BFu0i_Ui  {
  float v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 F_BFu0i_Ui) C1{ Fi Fi:0 Fi}



static void Test_F_BFu0i_Ui()
{
  {
    init_simple_test("F_BFu0i_Ui");
    static STRUCT_IF_C F_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "F_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_Ui, F_BFu0i_Ui)
//============================================================================


struct  F_BFu0i_Ul  {
  float v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 F_BFu0i_Ul) C1{ Fi Fi:0 FL}



static void Test_F_BFu0i_Ul()
{
  {
    init_simple_test("F_BFu0i_Ul");
    static STRUCT_IF_C F_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "F_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_Ul, F_BFu0i_Ul)
//============================================================================


struct  F_BFu0i_Us  {
  float v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 F_BFu0i_Us) C1{ Fi Fi:0 Fs}



static void Test_F_BFu0i_Us()
{
  {
    init_simple_test("F_BFu0i_Us");
    static STRUCT_IF_C F_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "F_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "F_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_Us, F_BFu0i_Us)
//============================================================================


struct  F_BFu0i_Vp  {
  float v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 F_BFu0i_Vp) C1{ Fi Fi:0 Fp}



static void Test_F_BFu0i_Vp()
{
  {
    init_simple_test("F_BFu0i_Vp");
    static STRUCT_IF_C F_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "F_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0i_Vp, F_BFu0i_Vp)
//============================================================================


struct  F_BFu0ll  {
  float v1;
  __tsu64  :0;
};
//SIG(1 F_BFu0ll) C1{ Fi FL:0}



static void Test_F_BFu0ll()
{
  {
    init_simple_test("F_BFu0ll");
    static STRUCT_IF_C F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll, F_BFu0ll)
//============================================================================


struct  F_BFu0ll_BFu0c  {
  float v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 F_BFu0ll_BFu0c) C1{ Fi FL:0 Fc:0}



static void Test_F_BFu0ll_BFu0c()
{
  {
    init_simple_test("F_BFu0ll_BFu0c");
    static STRUCT_IF_C F_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu0c, F_BFu0ll_BFu0c)
//============================================================================


struct  F_BFu0ll_BFu0i  {
  float v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 F_BFu0ll_BFu0i) C1{ Fi FL:0 Fi:0}



static void Test_F_BFu0ll_BFu0i()
{
  {
    init_simple_test("F_BFu0ll_BFu0i");
    static STRUCT_IF_C F_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu0i, F_BFu0ll_BFu0i)
//============================================================================


struct  F_BFu0ll_BFu0ll  {
  float v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 F_BFu0ll_BFu0ll) C1{ Fi FL:0 FL:0}



static void Test_F_BFu0ll_BFu0ll()
{
  {
    init_simple_test("F_BFu0ll_BFu0ll");
    static STRUCT_IF_C F_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu0ll, F_BFu0ll_BFu0ll)
//============================================================================


struct  F_BFu0ll_BFu0s  {
  float v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 F_BFu0ll_BFu0s) C1{ Fi FL:0 Fs:0}



static void Test_F_BFu0ll_BFu0s()
{
  {
    init_simple_test("F_BFu0ll_BFu0s");
    static STRUCT_IF_C F_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu0s, F_BFu0ll_BFu0s)
//============================================================================


struct  F_BFu0ll_BFu15i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 F_BFu0ll_BFu15i) C1{ Fi FL:0 Fi:15}



static void Test_F_BFu0ll_BFu15i()
{
  {
    init_simple_test("F_BFu0ll_BFu15i");
    static STRUCT_IF_C F_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "F_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "F_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu15i, F_BFu0ll_BFu15i)
//============================================================================


struct  F_BFu0ll_BFu15ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 F_BFu0ll_BFu15ll) C1{ Fi FL:0 FL:15}



static void Test_F_BFu0ll_BFu15ll()
{
  {
    init_simple_test("F_BFu0ll_BFu15ll");
    static STRUCT_IF_C F_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "F_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "F_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu15ll, F_BFu0ll_BFu15ll)
//============================================================================


struct  F_BFu0ll_BFu15s  {
  float v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 F_BFu0ll_BFu15s) C1{ Fi FL:0 Fs:15}



static void Test_F_BFu0ll_BFu15s()
{
  {
    init_simple_test("F_BFu0ll_BFu15s");
    static STRUCT_IF_C F_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "F_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "F_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu15s, F_BFu0ll_BFu15s)
//============================================================================


struct  F_BFu0ll_BFu16i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 F_BFu0ll_BFu16i) C1{ Fi FL:0 Fi:16}



static void Test_F_BFu0ll_BFu16i()
{
  {
    init_simple_test("F_BFu0ll_BFu16i");
    static STRUCT_IF_C F_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "F_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "F_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu16i, F_BFu0ll_BFu16i)
//============================================================================


struct  F_BFu0ll_BFu16ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 F_BFu0ll_BFu16ll) C1{ Fi FL:0 FL:16}



static void Test_F_BFu0ll_BFu16ll()
{
  {
    init_simple_test("F_BFu0ll_BFu16ll");
    static STRUCT_IF_C F_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "F_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "F_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu16ll, F_BFu0ll_BFu16ll)
//============================================================================


struct  F_BFu0ll_BFu16s  {
  float v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 F_BFu0ll_BFu16s) C1{ Fi FL:0 Fs:16}



static void Test_F_BFu0ll_BFu16s()
{
  {
    init_simple_test("F_BFu0ll_BFu16s");
    static STRUCT_IF_C F_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "F_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "F_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu16s, F_BFu0ll_BFu16s)
//============================================================================


struct  F_BFu0ll_BFu17i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 F_BFu0ll_BFu17i) C1{ Fi FL:0 Fi:17}



static void Test_F_BFu0ll_BFu17i()
{
  {
    init_simple_test("F_BFu0ll_BFu17i");
    static STRUCT_IF_C F_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "F_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "F_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu17i, F_BFu0ll_BFu17i)
//============================================================================


struct  F_BFu0ll_BFu17ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 F_BFu0ll_BFu17ll) C1{ Fi FL:0 FL:17}



static void Test_F_BFu0ll_BFu17ll()
{
  {
    init_simple_test("F_BFu0ll_BFu17ll");
    static STRUCT_IF_C F_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "F_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "F_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu17ll, F_BFu0ll_BFu17ll)
//============================================================================


struct  F_BFu0ll_BFu1c  {
  float v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 F_BFu0ll_BFu1c) C1{ Fi FL:0 Fc:1}



static void Test_F_BFu0ll_BFu1c()
{
  {
    init_simple_test("F_BFu0ll_BFu1c");
    static STRUCT_IF_C F_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "F_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu1c, F_BFu0ll_BFu1c)
//============================================================================


struct  F_BFu0ll_BFu1i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 F_BFu0ll_BFu1i) C1{ Fi FL:0 Fi:1}



static void Test_F_BFu0ll_BFu1i()
{
  {
    init_simple_test("F_BFu0ll_BFu1i");
    static STRUCT_IF_C F_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "F_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu1i, F_BFu0ll_BFu1i)
//============================================================================


struct  F_BFu0ll_BFu1ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 F_BFu0ll_BFu1ll) C1{ Fi FL:0 FL:1}



static void Test_F_BFu0ll_BFu1ll()
{
  {
    init_simple_test("F_BFu0ll_BFu1ll");
    static STRUCT_IF_C F_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "F_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu1ll, F_BFu0ll_BFu1ll)
//============================================================================


struct  F_BFu0ll_BFu1s  {
  float v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 F_BFu0ll_BFu1s) C1{ Fi FL:0 Fs:1}



static void Test_F_BFu0ll_BFu1s()
{
  {
    init_simple_test("F_BFu0ll_BFu1s");
    static STRUCT_IF_C F_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "F_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu1s, F_BFu0ll_BFu1s)
//============================================================================


struct  F_BFu0ll_BFu31i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 F_BFu0ll_BFu31i) C1{ Fi FL:0 Fi:31}



static void Test_F_BFu0ll_BFu31i()
{
  {
    init_simple_test("F_BFu0ll_BFu31i");
    static STRUCT_IF_C F_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "F_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "F_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu31i, F_BFu0ll_BFu31i)
//============================================================================


struct  F_BFu0ll_BFu31ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 F_BFu0ll_BFu31ll) C1{ Fi FL:0 FL:31}



static void Test_F_BFu0ll_BFu31ll()
{
  {
    init_simple_test("F_BFu0ll_BFu31ll");
    static STRUCT_IF_C F_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "F_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "F_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu31ll, F_BFu0ll_BFu31ll)
//============================================================================


struct  F_BFu0ll_BFu32i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 F_BFu0ll_BFu32i) C1{ Fi FL:0 Fi:32}



static void Test_F_BFu0ll_BFu32i()
{
  {
    init_simple_test("F_BFu0ll_BFu32i");
    static STRUCT_IF_C F_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "F_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "F_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu32i, F_BFu0ll_BFu32i)
//============================================================================


struct  F_BFu0ll_BFu32ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 F_BFu0ll_BFu32ll) C1{ Fi FL:0 FL:32}



static void Test_F_BFu0ll_BFu32ll()
{
  {
    init_simple_test("F_BFu0ll_BFu32ll");
    static STRUCT_IF_C F_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "F_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "F_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu32ll, F_BFu0ll_BFu32ll)
//============================================================================


struct  F_BFu0ll_BFu33  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 F_BFu0ll_BFu33) C1{ Fi FL:0 FL:33}



static void Test_F_BFu0ll_BFu33()
{
  {
    init_simple_test("F_BFu0ll_BFu33");
    static STRUCT_IF_C F_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu33, F_BFu0ll_BFu33)
//============================================================================


struct  F_BFu0ll_BFu7c  {
  float v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 F_BFu0ll_BFu7c) C1{ Fi FL:0 Fc:7}



static void Test_F_BFu0ll_BFu7c()
{
  {
    init_simple_test("F_BFu0ll_BFu7c");
    static STRUCT_IF_C F_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "F_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "F_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu7c, F_BFu0ll_BFu7c)
//============================================================================


struct  F_BFu0ll_BFu7i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 F_BFu0ll_BFu7i) C1{ Fi FL:0 Fi:7}



static void Test_F_BFu0ll_BFu7i()
{
  {
    init_simple_test("F_BFu0ll_BFu7i");
    static STRUCT_IF_C F_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "F_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "F_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu7i, F_BFu0ll_BFu7i)
//============================================================================


struct  F_BFu0ll_BFu7ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 F_BFu0ll_BFu7ll) C1{ Fi FL:0 FL:7}



static void Test_F_BFu0ll_BFu7ll()
{
  {
    init_simple_test("F_BFu0ll_BFu7ll");
    static STRUCT_IF_C F_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "F_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "F_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu7ll, F_BFu0ll_BFu7ll)
//============================================================================


struct  F_BFu0ll_BFu7s  {
  float v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 F_BFu0ll_BFu7s) C1{ Fi FL:0 Fs:7}



static void Test_F_BFu0ll_BFu7s()
{
  {
    init_simple_test("F_BFu0ll_BFu7s");
    static STRUCT_IF_C F_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "F_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "F_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu7s, F_BFu0ll_BFu7s)
//============================================================================


struct  F_BFu0ll_BFu8c  {
  float v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 F_BFu0ll_BFu8c) C1{ Fi FL:0 Fc:8}



static void Test_F_BFu0ll_BFu8c()
{
  {
    init_simple_test("F_BFu0ll_BFu8c");
    static STRUCT_IF_C F_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "F_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "F_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu8c, F_BFu0ll_BFu8c)
//============================================================================


struct  F_BFu0ll_BFu8i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 F_BFu0ll_BFu8i) C1{ Fi FL:0 Fi:8}



static void Test_F_BFu0ll_BFu8i()
{
  {
    init_simple_test("F_BFu0ll_BFu8i");
    static STRUCT_IF_C F_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "F_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "F_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu8i, F_BFu0ll_BFu8i)
//============================================================================


struct  F_BFu0ll_BFu8ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 F_BFu0ll_BFu8ll) C1{ Fi FL:0 FL:8}



static void Test_F_BFu0ll_BFu8ll()
{
  {
    init_simple_test("F_BFu0ll_BFu8ll");
    static STRUCT_IF_C F_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "F_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "F_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu8ll, F_BFu0ll_BFu8ll)
//============================================================================


struct  F_BFu0ll_BFu8s  {
  float v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 F_BFu0ll_BFu8s) C1{ Fi FL:0 Fs:8}



static void Test_F_BFu0ll_BFu8s()
{
  {
    init_simple_test("F_BFu0ll_BFu8s");
    static STRUCT_IF_C F_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "F_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "F_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu8s, F_BFu0ll_BFu8s)
//============================================================================


struct  F_BFu0ll_BFu9i  {
  float v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 F_BFu0ll_BFu9i) C1{ Fi FL:0 Fi:9}



static void Test_F_BFu0ll_BFu9i()
{
  {
    init_simple_test("F_BFu0ll_BFu9i");
    static STRUCT_IF_C F_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "F_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "F_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu9i, F_BFu0ll_BFu9i)
//============================================================================


struct  F_BFu0ll_BFu9ll  {
  float v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 F_BFu0ll_BFu9ll) C1{ Fi FL:0 FL:9}



static void Test_F_BFu0ll_BFu9ll()
{
  {
    init_simple_test("F_BFu0ll_BFu9ll");
    static STRUCT_IF_C F_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "F_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "F_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu9ll, F_BFu0ll_BFu9ll)
//============================================================================


struct  F_BFu0ll_BFu9s  {
  float v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 F_BFu0ll_BFu9s) C1{ Fi FL:0 Fs:9}



static void Test_F_BFu0ll_BFu9s()
{
  {
    init_simple_test("F_BFu0ll_BFu9s");
    static STRUCT_IF_C F_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "F_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "F_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_BFu9s, F_BFu0ll_BFu9s)
//============================================================================


struct  F_BFu0ll_C  {
  float v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 F_BFu0ll_C) C1{ Fi FL:0 Fc}



static void Test_F_BFu0ll_C()
{
  {
    init_simple_test("F_BFu0ll_C");
    static STRUCT_IF_C F_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_C, F_BFu0ll_C)
//============================================================================


struct  F_BFu0ll_D  {
  float v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 F_BFu0ll_D) C1{ Fi FL:0 FL}



static void Test_F_BFu0ll_D()
{
  {
    init_simple_test("F_BFu0ll_D");
    static STRUCT_IF_C F_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_D, F_BFu0ll_D)
//============================================================================


struct  F_BFu0ll_F  {
  float v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 F_BFu0ll_F) C1{ Fi FL:0 Fi}



static void Test_F_BFu0ll_F()
{
  {
    init_simple_test("F_BFu0ll_F");
    static STRUCT_IF_C F_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_F, F_BFu0ll_F)
//============================================================================


struct  F_BFu0ll_I  {
  float v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 F_BFu0ll_I) C1{ Fi FL:0 Fi}



static void Test_F_BFu0ll_I()
{
  {
    init_simple_test("F_BFu0ll_I");
    static STRUCT_IF_C F_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_I, F_BFu0ll_I)
//============================================================================


struct  F_BFu0ll_Ip  {
  float v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 F_BFu0ll_Ip) C1{ Fi FL:0 Fp}



static void Test_F_BFu0ll_Ip()
{
  {
    init_simple_test("F_BFu0ll_Ip");
    static STRUCT_IF_C F_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_Ip, F_BFu0ll_Ip)
//============================================================================


struct  F_BFu0ll_L  {
  float v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 F_BFu0ll_L) C1{ Fi FL:0 FL}



static void Test_F_BFu0ll_L()
{
  {
    init_simple_test("F_BFu0ll_L");
    static STRUCT_IF_C F_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_L, F_BFu0ll_L)
//============================================================================


struct  F_BFu0ll_S  {
  float v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 F_BFu0ll_S) C1{ Fi FL:0 Fs}



static void Test_F_BFu0ll_S()
{
  {
    init_simple_test("F_BFu0ll_S");
    static STRUCT_IF_C F_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_S, F_BFu0ll_S)
//============================================================================


struct  F_BFu0ll_Uc  {
  float v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 F_BFu0ll_Uc) C1{ Fi FL:0 Fc}



static void Test_F_BFu0ll_Uc()
{
  {
    init_simple_test("F_BFu0ll_Uc");
    static STRUCT_IF_C F_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_Uc, F_BFu0ll_Uc)
//============================================================================


struct  F_BFu0ll_Ui  {
  float v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 F_BFu0ll_Ui) C1{ Fi FL:0 Fi}



static void Test_F_BFu0ll_Ui()
{
  {
    init_simple_test("F_BFu0ll_Ui");
    static STRUCT_IF_C F_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_Ui, F_BFu0ll_Ui)
//============================================================================


struct  F_BFu0ll_Ul  {
  float v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 F_BFu0ll_Ul) C1{ Fi FL:0 FL}



static void Test_F_BFu0ll_Ul()
{
  {
    init_simple_test("F_BFu0ll_Ul");
    static STRUCT_IF_C F_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_Ul, F_BFu0ll_Ul)
//============================================================================


struct  F_BFu0ll_Us  {
  float v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 F_BFu0ll_Us) C1{ Fi FL:0 Fs}



static void Test_F_BFu0ll_Us()
{
  {
    init_simple_test("F_BFu0ll_Us");
    static STRUCT_IF_C F_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(F_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_Us, F_BFu0ll_Us)
//============================================================================


struct  F_BFu0ll_Vp  {
  float v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 F_BFu0ll_Vp) C1{ Fi FL:0 Fp}



static void Test_F_BFu0ll_Vp()
{
  {
    init_simple_test("F_BFu0ll_Vp");
    static STRUCT_IF_C F_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "F_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0ll_Vp, F_BFu0ll_Vp)
//============================================================================


struct  F_BFu0s  {
  float v1;
  unsigned short  :0;
};
//SIG(1 F_BFu0s) C1{ Fi Fs:0}



static void Test_F_BFu0s()
{
  {
    init_simple_test("F_BFu0s");
    static STRUCT_IF_C F_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s, F_BFu0s)
//============================================================================


struct  F_BFu0s_BFu0c  {
  float v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 F_BFu0s_BFu0c) C1{ Fi Fs:0 Fc:0}



static void Test_F_BFu0s_BFu0c()
{
  {
    init_simple_test("F_BFu0s_BFu0c");
    static STRUCT_IF_C F_BFu0s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu0c, F_BFu0s_BFu0c)
//============================================================================


struct  F_BFu0s_BFu0i  {
  float v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 F_BFu0s_BFu0i) C1{ Fi Fs:0 Fi:0}



static void Test_F_BFu0s_BFu0i()
{
  {
    init_simple_test("F_BFu0s_BFu0i");
    static STRUCT_IF_C F_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu0i, F_BFu0s_BFu0i)
//============================================================================


struct  F_BFu0s_BFu0ll  {
  float v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 F_BFu0s_BFu0ll) C1{ Fi Fs:0 FL:0}



static void Test_F_BFu0s_BFu0ll()
{
  {
    init_simple_test("F_BFu0s_BFu0ll");
    static STRUCT_IF_C F_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(F_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu0ll, F_BFu0s_BFu0ll)
//============================================================================


struct  F_BFu0s_BFu0s  {
  float v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 F_BFu0s_BFu0s) C1{ Fi Fs:0 Fs:0}



static void Test_F_BFu0s_BFu0s()
{
  {
    init_simple_test("F_BFu0s_BFu0s");
    static STRUCT_IF_C F_BFu0s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(F_BFu0s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu0s, F_BFu0s_BFu0s)
//============================================================================


struct  F_BFu0s_BFu15i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 F_BFu0s_BFu15i) C1{ Fi Fs:0 Fi:15}



static void Test_F_BFu0s_BFu15i()
{
  {
    init_simple_test("F_BFu0s_BFu15i");
    static STRUCT_IF_C F_BFu0s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu15i, F_BFu0s_BFu15i)
//============================================================================


struct  F_BFu0s_BFu15ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 F_BFu0s_BFu15ll) C1{ Fi Fs:0 FL:15}



static void Test_F_BFu0s_BFu15ll()
{
  {
    init_simple_test("F_BFu0s_BFu15ll");
    static STRUCT_IF_C F_BFu0s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu15ll, F_BFu0s_BFu15ll)
//============================================================================


struct  F_BFu0s_BFu15s  {
  float v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 F_BFu0s_BFu15s) C1{ Fi Fs:0 Fs:15}



static void Test_F_BFu0s_BFu15s()
{
  {
    init_simple_test("F_BFu0s_BFu15s");
    static STRUCT_IF_C F_BFu0s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu15s, F_BFu0s_BFu15s)
//============================================================================


struct  F_BFu0s_BFu16i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 F_BFu0s_BFu16i) C1{ Fi Fs:0 Fi:16}



static void Test_F_BFu0s_BFu16i()
{
  {
    init_simple_test("F_BFu0s_BFu16i");
    static STRUCT_IF_C F_BFu0s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu16i, F_BFu0s_BFu16i)
//============================================================================


struct  F_BFu0s_BFu16ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 F_BFu0s_BFu16ll) C1{ Fi Fs:0 FL:16}



static void Test_F_BFu0s_BFu16ll()
{
  {
    init_simple_test("F_BFu0s_BFu16ll");
    static STRUCT_IF_C F_BFu0s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu16ll, F_BFu0s_BFu16ll)
//============================================================================


struct  F_BFu0s_BFu16s  {
  float v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 F_BFu0s_BFu16s) C1{ Fi Fs:0 Fs:16}



static void Test_F_BFu0s_BFu16s()
{
  {
    init_simple_test("F_BFu0s_BFu16s");
    static STRUCT_IF_C F_BFu0s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu16s, F_BFu0s_BFu16s)
//============================================================================


struct  F_BFu0s_BFu17i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 F_BFu0s_BFu17i) C1{ Fi Fs:0 Fi:17}



static void Test_F_BFu0s_BFu17i()
{
  {
    init_simple_test("F_BFu0s_BFu17i");
    static STRUCT_IF_C F_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu17i, F_BFu0s_BFu17i)
//============================================================================


struct  F_BFu0s_BFu17ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 F_BFu0s_BFu17ll) C1{ Fi Fs:0 FL:17}



static void Test_F_BFu0s_BFu17ll()
{
  {
    init_simple_test("F_BFu0s_BFu17ll");
    static STRUCT_IF_C F_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu17ll, F_BFu0s_BFu17ll)
//============================================================================


struct  F_BFu0s_BFu1c  {
  float v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 F_BFu0s_BFu1c) C1{ Fi Fs:0 Fc:1}



static void Test_F_BFu0s_BFu1c()
{
  {
    init_simple_test("F_BFu0s_BFu1c");
    static STRUCT_IF_C F_BFu0s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu1c, F_BFu0s_BFu1c)
//============================================================================


struct  F_BFu0s_BFu1i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 F_BFu0s_BFu1i) C1{ Fi Fs:0 Fi:1}



static void Test_F_BFu0s_BFu1i()
{
  {
    init_simple_test("F_BFu0s_BFu1i");
    static STRUCT_IF_C F_BFu0s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu1i, F_BFu0s_BFu1i)
//============================================================================


struct  F_BFu0s_BFu1ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 F_BFu0s_BFu1ll) C1{ Fi Fs:0 FL:1}



static void Test_F_BFu0s_BFu1ll()
{
  {
    init_simple_test("F_BFu0s_BFu1ll");
    static STRUCT_IF_C F_BFu0s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu1ll, F_BFu0s_BFu1ll)
//============================================================================


struct  F_BFu0s_BFu1s  {
  float v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 F_BFu0s_BFu1s) C1{ Fi Fs:0 Fs:1}



static void Test_F_BFu0s_BFu1s()
{
  {
    init_simple_test("F_BFu0s_BFu1s");
    static STRUCT_IF_C F_BFu0s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu1s, F_BFu0s_BFu1s)
//============================================================================


struct  F_BFu0s_BFu31i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 F_BFu0s_BFu31i) C1{ Fi Fs:0 Fi:31}



static void Test_F_BFu0s_BFu31i()
{
  {
    init_simple_test("F_BFu0s_BFu31i");
    static STRUCT_IF_C F_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu31i, F_BFu0s_BFu31i)
//============================================================================


struct  F_BFu0s_BFu31ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 F_BFu0s_BFu31ll) C1{ Fi Fs:0 FL:31}



static void Test_F_BFu0s_BFu31ll()
{
  {
    init_simple_test("F_BFu0s_BFu31ll");
    static STRUCT_IF_C F_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu31ll, F_BFu0s_BFu31ll)
//============================================================================


struct  F_BFu0s_BFu32i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 F_BFu0s_BFu32i) C1{ Fi Fs:0 Fi:32}



static void Test_F_BFu0s_BFu32i()
{
  {
    init_simple_test("F_BFu0s_BFu32i");
    static STRUCT_IF_C F_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu32i, F_BFu0s_BFu32i)
//============================================================================


struct  F_BFu0s_BFu32ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 F_BFu0s_BFu32ll) C1{ Fi Fs:0 FL:32}



static void Test_F_BFu0s_BFu32ll()
{
  {
    init_simple_test("F_BFu0s_BFu32ll");
    static STRUCT_IF_C F_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu32ll, F_BFu0s_BFu32ll)
//============================================================================


struct  F_BFu0s_BFu33  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 F_BFu0s_BFu33) C1{ Fi Fs:0 FL:33}



static void Test_F_BFu0s_BFu33()
{
  {
    init_simple_test("F_BFu0s_BFu33");
    static STRUCT_IF_C F_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu33, F_BFu0s_BFu33)
//============================================================================


struct  F_BFu0s_BFu7c  {
  float v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 F_BFu0s_BFu7c) C1{ Fi Fs:0 Fc:7}



static void Test_F_BFu0s_BFu7c()
{
  {
    init_simple_test("F_BFu0s_BFu7c");
    static STRUCT_IF_C F_BFu0s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu7c, F_BFu0s_BFu7c)
//============================================================================


struct  F_BFu0s_BFu7i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 F_BFu0s_BFu7i) C1{ Fi Fs:0 Fi:7}



static void Test_F_BFu0s_BFu7i()
{
  {
    init_simple_test("F_BFu0s_BFu7i");
    static STRUCT_IF_C F_BFu0s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu7i, F_BFu0s_BFu7i)
//============================================================================


struct  F_BFu0s_BFu7ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 F_BFu0s_BFu7ll) C1{ Fi Fs:0 FL:7}



static void Test_F_BFu0s_BFu7ll()
{
  {
    init_simple_test("F_BFu0s_BFu7ll");
    static STRUCT_IF_C F_BFu0s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu7ll, F_BFu0s_BFu7ll)
//============================================================================


struct  F_BFu0s_BFu7s  {
  float v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 F_BFu0s_BFu7s) C1{ Fi Fs:0 Fs:7}



static void Test_F_BFu0s_BFu7s()
{
  {
    init_simple_test("F_BFu0s_BFu7s");
    static STRUCT_IF_C F_BFu0s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu7s, F_BFu0s_BFu7s)
//============================================================================


struct  F_BFu0s_BFu8c  {
  float v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 F_BFu0s_BFu8c) C1{ Fi Fs:0 Fc:8}



static void Test_F_BFu0s_BFu8c()
{
  {
    init_simple_test("F_BFu0s_BFu8c");
    static STRUCT_IF_C F_BFu0s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu8c, F_BFu0s_BFu8c)
//============================================================================


struct  F_BFu0s_BFu8i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 F_BFu0s_BFu8i) C1{ Fi Fs:0 Fi:8}



static void Test_F_BFu0s_BFu8i()
{
  {
    init_simple_test("F_BFu0s_BFu8i");
    static STRUCT_IF_C F_BFu0s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu8i, F_BFu0s_BFu8i)
//============================================================================


struct  F_BFu0s_BFu8ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 F_BFu0s_BFu8ll) C1{ Fi Fs:0 FL:8}



static void Test_F_BFu0s_BFu8ll()
{
  {
    init_simple_test("F_BFu0s_BFu8ll");
    static STRUCT_IF_C F_BFu0s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu8ll, F_BFu0s_BFu8ll)
//============================================================================


struct  F_BFu0s_BFu8s  {
  float v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 F_BFu0s_BFu8s) C1{ Fi Fs:0 Fs:8}



static void Test_F_BFu0s_BFu8s()
{
  {
    init_simple_test("F_BFu0s_BFu8s");
    static STRUCT_IF_C F_BFu0s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu8s, F_BFu0s_BFu8s)
//============================================================================


struct  F_BFu0s_BFu9i  {
  float v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 F_BFu0s_BFu9i) C1{ Fi Fs:0 Fi:9}



static void Test_F_BFu0s_BFu9i()
{
  {
    init_simple_test("F_BFu0s_BFu9i");
    static STRUCT_IF_C F_BFu0s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu9i, F_BFu0s_BFu9i)
//============================================================================


struct  F_BFu0s_BFu9ll  {
  float v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 F_BFu0s_BFu9ll) C1{ Fi Fs:0 FL:9}



static void Test_F_BFu0s_BFu9ll()
{
  {
    init_simple_test("F_BFu0s_BFu9ll");
    static STRUCT_IF_C F_BFu0s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu9ll, F_BFu0s_BFu9ll)
//============================================================================


struct  F_BFu0s_BFu9s  {
  float v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 F_BFu0s_BFu9s) C1{ Fi Fs:0 Fs:9}



static void Test_F_BFu0s_BFu9s()
{
  {
    init_simple_test("F_BFu0s_BFu9s");
    static STRUCT_IF_C F_BFu0s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "F_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_BFu9s, F_BFu0s_BFu9s)
//============================================================================


struct  F_BFu0s_C  {
  float v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 F_BFu0s_C) C1{ Fi Fs:0 Fc}



static void Test_F_BFu0s_C()
{
  {
    init_simple_test("F_BFu0s_C");
    static STRUCT_IF_C F_BFu0s_C lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_C)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_C)");
    check_field_offset(lv, v1, 0, "F_BFu0s_C.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_C, F_BFu0s_C)
//============================================================================


struct  F_BFu0s_D  {
  float v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 F_BFu0s_D) C1{ Fi Fs:0 FL}



static void Test_F_BFu0s_D()
{
  {
    init_simple_test("F_BFu0s_D");
    static STRUCT_IF_C F_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_D)");
    check_field_offset(lv, v1, 0, "F_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_D, F_BFu0s_D)
//============================================================================


struct  F_BFu0s_F  {
  float v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 F_BFu0s_F) C1{ Fi Fs:0 Fi}



static void Test_F_BFu0s_F()
{
  {
    init_simple_test("F_BFu0s_F");
    static STRUCT_IF_C F_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_F)");
    check_field_offset(lv, v1, 0, "F_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_F, F_BFu0s_F)
//============================================================================


struct  F_BFu0s_I  {
  float v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 F_BFu0s_I) C1{ Fi Fs:0 Fi}



static void Test_F_BFu0s_I()
{
  {
    init_simple_test("F_BFu0s_I");
    static STRUCT_IF_C F_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_I)");
    check_field_offset(lv, v1, 0, "F_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_I, F_BFu0s_I)
//============================================================================


struct  F_BFu0s_Ip  {
  float v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 F_BFu0s_Ip) C1{ Fi Fs:0 Fp}



static void Test_F_BFu0s_Ip()
{
  {
    init_simple_test("F_BFu0s_Ip");
    static STRUCT_IF_C F_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "F_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_Ip, F_BFu0s_Ip)
//============================================================================


struct  F_BFu0s_L  {
  float v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 F_BFu0s_L) C1{ Fi Fs:0 FL}



static void Test_F_BFu0s_L()
{
  {
    init_simple_test("F_BFu0s_L");
    static STRUCT_IF_C F_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_L)");
    check_field_offset(lv, v1, 0, "F_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_L, F_BFu0s_L)
//============================================================================


struct  F_BFu0s_S  {
  float v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 F_BFu0s_S) C1{ Fi Fs:0 Fs}



static void Test_F_BFu0s_S()
{
  {
    init_simple_test("F_BFu0s_S");
    static STRUCT_IF_C F_BFu0s_S lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_S)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_S)");
    check_field_offset(lv, v1, 0, "F_BFu0s_S.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_S, F_BFu0s_S)
//============================================================================


struct  F_BFu0s_Uc  {
  float v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 F_BFu0s_Uc) C1{ Fi Fs:0 Fc}



static void Test_F_BFu0s_Uc()
{
  {
    init_simple_test("F_BFu0s_Uc");
    static STRUCT_IF_C F_BFu0s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "F_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_Uc, F_BFu0s_Uc)
//============================================================================


struct  F_BFu0s_Ui  {
  float v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 F_BFu0s_Ui) C1{ Fi Fs:0 Fi}



static void Test_F_BFu0s_Ui()
{
  {
    init_simple_test("F_BFu0s_Ui");
    static STRUCT_IF_C F_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "F_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_Ui, F_BFu0s_Ui)
//============================================================================


struct  F_BFu0s_Ul  {
  float v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 F_BFu0s_Ul) C1{ Fi Fs:0 FL}



static void Test_F_BFu0s_Ul()
{
  {
    init_simple_test("F_BFu0s_Ul");
    static STRUCT_IF_C F_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "F_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_Ul, F_BFu0s_Ul)
//============================================================================


struct  F_BFu0s_Us  {
  float v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 F_BFu0s_Us) C1{ Fi Fs:0 Fs}



static void Test_F_BFu0s_Us()
{
  {
    init_simple_test("F_BFu0s_Us");
    static STRUCT_IF_C F_BFu0s_Us lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu0s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "F_BFu0s_Us.v1");
    check_field_offset(lv, v2, 4, "F_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_Us, F_BFu0s_Us)
//============================================================================


struct  F_BFu0s_Vp  {
  float v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 F_BFu0s_Vp) C1{ Fi Fs:0 Fp}



static void Test_F_BFu0s_Vp()
{
  {
    init_simple_test("F_BFu0s_Vp");
    static STRUCT_IF_C F_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "F_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu0s_Vp, F_BFu0s_Vp)
//============================================================================


struct  F_BFu15i_BFu0c  {
  float v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 F_BFu15i_BFu0c) C1{ Fi Fi:15 Fc:0}



static void Test_F_BFu15i_BFu0c()
{
  {
    init_simple_test("F_BFu15i_BFu0c");
    static STRUCT_IF_C F_BFu15i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15i_BFu0c, F_BFu15i_BFu0c)
//============================================================================


struct  F_BFu15i_BFu0i  {
  float v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 F_BFu15i_BFu0i) C1{ Fi Fi:15 Fi:0}



static void Test_F_BFu15i_BFu0i()
{
  {
    init_simple_test("F_BFu15i_BFu0i");
    static STRUCT_IF_C F_BFu15i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15i_BFu0i, F_BFu15i_BFu0i)
//============================================================================


struct  F_BFu15i_BFu0ll  {
  float v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 F_BFu15i_BFu0ll) C1{ Fi Fi:15 FL:0}



static void Test_F_BFu15i_BFu0ll()
{
  {
    init_simple_test("F_BFu15i_BFu0ll");
    static STRUCT_IF_C F_BFu15i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15i_BFu0ll, F_BFu15i_BFu0ll)
//============================================================================


struct  F_BFu15i_BFu0s  {
  float v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 F_BFu15i_BFu0s) C1{ Fi Fi:15 Fs:0}



static void Test_F_BFu15i_BFu0s()
{
  {
    init_simple_test("F_BFu15i_BFu0s");
    static STRUCT_IF_C F_BFu15i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15i_BFu0s, F_BFu15i_BFu0s)
//============================================================================


struct  F_BFu15ll_BFu0c  {
  float v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 F_BFu15ll_BFu0c) C1{ Fi FL:15 Fc:0}



static void Test_F_BFu15ll_BFu0c()
{
  {
    init_simple_test("F_BFu15ll_BFu0c");
    static STRUCT_IF_C F_BFu15ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15ll_BFu0c, F_BFu15ll_BFu0c)
//============================================================================


struct  F_BFu15ll_BFu0i  {
  float v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 F_BFu15ll_BFu0i) C1{ Fi FL:15 Fi:0}



static void Test_F_BFu15ll_BFu0i()
{
  {
    init_simple_test("F_BFu15ll_BFu0i");
    static STRUCT_IF_C F_BFu15ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15ll_BFu0i, F_BFu15ll_BFu0i)
//============================================================================


struct  F_BFu15ll_BFu0ll  {
  float v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 F_BFu15ll_BFu0ll) C1{ Fi FL:15 FL:0}



static void Test_F_BFu15ll_BFu0ll()
{
  {
    init_simple_test("F_BFu15ll_BFu0ll");
    static STRUCT_IF_C F_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15ll_BFu0ll, F_BFu15ll_BFu0ll)
//============================================================================


struct  F_BFu15ll_BFu0s  {
  float v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 F_BFu15ll_BFu0s) C1{ Fi FL:15 Fs:0}



static void Test_F_BFu15ll_BFu0s()
{
  {
    init_simple_test("F_BFu15ll_BFu0s");
    static STRUCT_IF_C F_BFu15ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15ll_BFu0s, F_BFu15ll_BFu0s)
//============================================================================


struct  F_BFu15s_BFu0c  {
  float v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 F_BFu15s_BFu0c) C1{ Fi Fs:15 Fc:0}



static void Test_F_BFu15s_BFu0c()
{
  {
    init_simple_test("F_BFu15s_BFu0c");
    static STRUCT_IF_C F_BFu15s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15s_BFu0c, F_BFu15s_BFu0c)
//============================================================================


struct  F_BFu15s_BFu0i  {
  float v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 F_BFu15s_BFu0i) C1{ Fi Fs:15 Fi:0}



static void Test_F_BFu15s_BFu0i()
{
  {
    init_simple_test("F_BFu15s_BFu0i");
    static STRUCT_IF_C F_BFu15s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15s_BFu0i, F_BFu15s_BFu0i)
//============================================================================


struct  F_BFu15s_BFu0ll  {
  float v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 F_BFu15s_BFu0ll) C1{ Fi Fs:15 FL:0}



static void Test_F_BFu15s_BFu0ll()
{
  {
    init_simple_test("F_BFu15s_BFu0ll");
    static STRUCT_IF_C F_BFu15s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15s_BFu0ll, F_BFu15s_BFu0ll)
//============================================================================


struct  F_BFu15s_BFu0s  {
  float v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 F_BFu15s_BFu0s) C1{ Fi Fs:15 Fs:0}



static void Test_F_BFu15s_BFu0s()
{
  {
    init_simple_test("F_BFu15s_BFu0s");
    static STRUCT_IF_C F_BFu15s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu15s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "F_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "F_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu15s_BFu0s, F_BFu15s_BFu0s)
//============================================================================


struct  F_BFu16i_BFu0c  {
  float v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 F_BFu16i_BFu0c) C1{ Fi Fi:16 Fc:0}



static void Test_F_BFu16i_BFu0c()
{
  {
    init_simple_test("F_BFu16i_BFu0c");
    static STRUCT_IF_C F_BFu16i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16i_BFu0c, F_BFu16i_BFu0c)
//============================================================================


struct  F_BFu16i_BFu0i  {
  float v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 F_BFu16i_BFu0i) C1{ Fi Fi:16 Fi:0}



static void Test_F_BFu16i_BFu0i()
{
  {
    init_simple_test("F_BFu16i_BFu0i");
    static STRUCT_IF_C F_BFu16i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16i_BFu0i, F_BFu16i_BFu0i)
//============================================================================


struct  F_BFu16i_BFu0ll  {
  float v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 F_BFu16i_BFu0ll) C1{ Fi Fi:16 FL:0}



static void Test_F_BFu16i_BFu0ll()
{
  {
    init_simple_test("F_BFu16i_BFu0ll");
    static STRUCT_IF_C F_BFu16i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16i_BFu0ll, F_BFu16i_BFu0ll)
//============================================================================


struct  F_BFu16i_BFu0s  {
  float v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 F_BFu16i_BFu0s) C1{ Fi Fi:16 Fs:0}



static void Test_F_BFu16i_BFu0s()
{
  {
    init_simple_test("F_BFu16i_BFu0s");
    static STRUCT_IF_C F_BFu16i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16i_BFu0s, F_BFu16i_BFu0s)
//============================================================================


struct  F_BFu16ll_BFu0c  {
  float v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 F_BFu16ll_BFu0c) C1{ Fi FL:16 Fc:0}



static void Test_F_BFu16ll_BFu0c()
{
  {
    init_simple_test("F_BFu16ll_BFu0c");
    static STRUCT_IF_C F_BFu16ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16ll_BFu0c, F_BFu16ll_BFu0c)
//============================================================================


struct  F_BFu16ll_BFu0i  {
  float v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 F_BFu16ll_BFu0i) C1{ Fi FL:16 Fi:0}



static void Test_F_BFu16ll_BFu0i()
{
  {
    init_simple_test("F_BFu16ll_BFu0i");
    static STRUCT_IF_C F_BFu16ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16ll_BFu0i, F_BFu16ll_BFu0i)
//============================================================================


struct  F_BFu16ll_BFu0ll  {
  float v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 F_BFu16ll_BFu0ll) C1{ Fi FL:16 FL:0}



static void Test_F_BFu16ll_BFu0ll()
{
  {
    init_simple_test("F_BFu16ll_BFu0ll");
    static STRUCT_IF_C F_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16ll_BFu0ll, F_BFu16ll_BFu0ll)
//============================================================================


struct  F_BFu16ll_BFu0s  {
  float v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 F_BFu16ll_BFu0s) C1{ Fi FL:16 Fs:0}



static void Test_F_BFu16ll_BFu0s()
{
  {
    init_simple_test("F_BFu16ll_BFu0s");
    static STRUCT_IF_C F_BFu16ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16ll_BFu0s, F_BFu16ll_BFu0s)
//============================================================================


struct  F_BFu16s_BFu0c  {
  float v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 F_BFu16s_BFu0c) C1{ Fi Fs:16 Fc:0}



static void Test_F_BFu16s_BFu0c()
{
  {
    init_simple_test("F_BFu16s_BFu0c");
    static STRUCT_IF_C F_BFu16s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16s_BFu0c, F_BFu16s_BFu0c)
//============================================================================


struct  F_BFu16s_BFu0i  {
  float v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 F_BFu16s_BFu0i) C1{ Fi Fs:16 Fi:0}



static void Test_F_BFu16s_BFu0i()
{
  {
    init_simple_test("F_BFu16s_BFu0i");
    static STRUCT_IF_C F_BFu16s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16s_BFu0i, F_BFu16s_BFu0i)
//============================================================================


struct  F_BFu16s_BFu0ll  {
  float v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 F_BFu16s_BFu0ll) C1{ Fi Fs:16 FL:0}



static void Test_F_BFu16s_BFu0ll()
{
  {
    init_simple_test("F_BFu16s_BFu0ll");
    static STRUCT_IF_C F_BFu16s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16s_BFu0ll, F_BFu16s_BFu0ll)
//============================================================================


struct  F_BFu16s_BFu0s  {
  float v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 F_BFu16s_BFu0s) C1{ Fi Fs:16 Fs:0}



static void Test_F_BFu16s_BFu0s()
{
  {
    init_simple_test("F_BFu16s_BFu0s");
    static STRUCT_IF_C F_BFu16s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu16s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "F_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "F_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu16s_BFu0s, F_BFu16s_BFu0s)
//============================================================================


struct  F_BFu17i_BFu0c  {
  float v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 F_BFu17i_BFu0c) C1{ Fi Fi:17 Fc:0}



static void Test_F_BFu17i_BFu0c()
{
  {
    init_simple_test("F_BFu17i_BFu0c");
    static STRUCT_IF_C F_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17i_BFu0c, F_BFu17i_BFu0c)
//============================================================================


struct  F_BFu17i_BFu0i  {
  float v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 F_BFu17i_BFu0i) C1{ Fi Fi:17 Fi:0}



static void Test_F_BFu17i_BFu0i()
{
  {
    init_simple_test("F_BFu17i_BFu0i");
    static STRUCT_IF_C F_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17i_BFu0i, F_BFu17i_BFu0i)
//============================================================================


struct  F_BFu17i_BFu0ll  {
  float v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 F_BFu17i_BFu0ll) C1{ Fi Fi:17 FL:0}



static void Test_F_BFu17i_BFu0ll()
{
  {
    init_simple_test("F_BFu17i_BFu0ll");
    static STRUCT_IF_C F_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17i_BFu0ll, F_BFu17i_BFu0ll)
//============================================================================


struct  F_BFu17i_BFu0s  {
  float v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 F_BFu17i_BFu0s) C1{ Fi Fi:17 Fs:0}



static void Test_F_BFu17i_BFu0s()
{
  {
    init_simple_test("F_BFu17i_BFu0s");
    static STRUCT_IF_C F_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17i_BFu0s, F_BFu17i_BFu0s)
//============================================================================


struct  F_BFu17ll_BFu0c  {
  float v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 F_BFu17ll_BFu0c) C1{ Fi FL:17 Fc:0}



static void Test_F_BFu17ll_BFu0c()
{
  {
    init_simple_test("F_BFu17ll_BFu0c");
    static STRUCT_IF_C F_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17ll_BFu0c, F_BFu17ll_BFu0c)
//============================================================================


struct  F_BFu17ll_BFu0i  {
  float v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 F_BFu17ll_BFu0i) C1{ Fi FL:17 Fi:0}



static void Test_F_BFu17ll_BFu0i()
{
  {
    init_simple_test("F_BFu17ll_BFu0i");
    static STRUCT_IF_C F_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17ll_BFu0i, F_BFu17ll_BFu0i)
//============================================================================


struct  F_BFu17ll_BFu0ll  {
  float v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 F_BFu17ll_BFu0ll) C1{ Fi FL:17 FL:0}



static void Test_F_BFu17ll_BFu0ll()
{
  {
    init_simple_test("F_BFu17ll_BFu0ll");
    static STRUCT_IF_C F_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17ll_BFu0ll, F_BFu17ll_BFu0ll)
//============================================================================


struct  F_BFu17ll_BFu0s  {
  float v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 F_BFu17ll_BFu0s) C1{ Fi FL:17 Fs:0}



static void Test_F_BFu17ll_BFu0s()
{
  {
    init_simple_test("F_BFu17ll_BFu0s");
    static STRUCT_IF_C F_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "F_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "F_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu17ll_BFu0s, F_BFu17ll_BFu0s)
//============================================================================


struct  F_BFu1c_BFu0c  {
  float v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 F_BFu1c_BFu0c) C1{ Fi Fc:1 Fc:0}



static void Test_F_BFu1c_BFu0c()
{
  {
    init_simple_test("F_BFu1c_BFu0c");
    static STRUCT_IF_C F_BFu1c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1c_BFu0c, F_BFu1c_BFu0c)
//============================================================================


struct  F_BFu1c_BFu0i  {
  float v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 F_BFu1c_BFu0i) C1{ Fi Fc:1 Fi:0}



static void Test_F_BFu1c_BFu0i()
{
  {
    init_simple_test("F_BFu1c_BFu0i");
    static STRUCT_IF_C F_BFu1c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1c_BFu0i, F_BFu1c_BFu0i)
//============================================================================


struct  F_BFu1c_BFu0ll  {
  float v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 F_BFu1c_BFu0ll) C1{ Fi Fc:1 FL:0}



static void Test_F_BFu1c_BFu0ll()
{
  {
    init_simple_test("F_BFu1c_BFu0ll");
    static STRUCT_IF_C F_BFu1c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1c_BFu0ll, F_BFu1c_BFu0ll)
//============================================================================


struct  F_BFu1c_BFu0s  {
  float v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 F_BFu1c_BFu0s) C1{ Fi Fc:1 Fs:0}



static void Test_F_BFu1c_BFu0s()
{
  {
    init_simple_test("F_BFu1c_BFu0s");
    static STRUCT_IF_C F_BFu1c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1c_BFu0s, F_BFu1c_BFu0s)
//============================================================================


struct  F_BFu1i_BFu0c  {
  float v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 F_BFu1i_BFu0c) C1{ Fi Fi:1 Fc:0}



static void Test_F_BFu1i_BFu0c()
{
  {
    init_simple_test("F_BFu1i_BFu0c");
    static STRUCT_IF_C F_BFu1i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1i_BFu0c, F_BFu1i_BFu0c)
//============================================================================


struct  F_BFu1i_BFu0i  {
  float v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 F_BFu1i_BFu0i) C1{ Fi Fi:1 Fi:0}



static void Test_F_BFu1i_BFu0i()
{
  {
    init_simple_test("F_BFu1i_BFu0i");
    static STRUCT_IF_C F_BFu1i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1i_BFu0i, F_BFu1i_BFu0i)
//============================================================================


struct  F_BFu1i_BFu0ll  {
  float v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 F_BFu1i_BFu0ll) C1{ Fi Fi:1 FL:0}



static void Test_F_BFu1i_BFu0ll()
{
  {
    init_simple_test("F_BFu1i_BFu0ll");
    static STRUCT_IF_C F_BFu1i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1i_BFu0ll, F_BFu1i_BFu0ll)
//============================================================================


struct  F_BFu1i_BFu0s  {
  float v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 F_BFu1i_BFu0s) C1{ Fi Fi:1 Fs:0}



static void Test_F_BFu1i_BFu0s()
{
  {
    init_simple_test("F_BFu1i_BFu0s");
    static STRUCT_IF_C F_BFu1i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1i_BFu0s, F_BFu1i_BFu0s)
//============================================================================


struct  F_BFu1ll_BFu0c  {
  float v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 F_BFu1ll_BFu0c) C1{ Fi FL:1 Fc:0}



static void Test_F_BFu1ll_BFu0c()
{
  {
    init_simple_test("F_BFu1ll_BFu0c");
    static STRUCT_IF_C F_BFu1ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1ll_BFu0c, F_BFu1ll_BFu0c)
//============================================================================


struct  F_BFu1ll_BFu0i  {
  float v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 F_BFu1ll_BFu0i) C1{ Fi FL:1 Fi:0}



static void Test_F_BFu1ll_BFu0i()
{
  {
    init_simple_test("F_BFu1ll_BFu0i");
    static STRUCT_IF_C F_BFu1ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1ll_BFu0i, F_BFu1ll_BFu0i)
//============================================================================


struct  F_BFu1ll_BFu0ll  {
  float v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 F_BFu1ll_BFu0ll) C1{ Fi FL:1 FL:0}



static void Test_F_BFu1ll_BFu0ll()
{
  {
    init_simple_test("F_BFu1ll_BFu0ll");
    static STRUCT_IF_C F_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1ll_BFu0ll, F_BFu1ll_BFu0ll)
//============================================================================


struct  F_BFu1ll_BFu0s  {
  float v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 F_BFu1ll_BFu0s) C1{ Fi FL:1 Fs:0}



static void Test_F_BFu1ll_BFu0s()
{
  {
    init_simple_test("F_BFu1ll_BFu0s");
    static STRUCT_IF_C F_BFu1ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1ll_BFu0s, F_BFu1ll_BFu0s)
//============================================================================


struct  F_BFu1s_BFu0c  {
  float v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 F_BFu1s_BFu0c) C1{ Fi Fs:1 Fc:0}



static void Test_F_BFu1s_BFu0c()
{
  {
    init_simple_test("F_BFu1s_BFu0c");
    static STRUCT_IF_C F_BFu1s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1s_BFu0c, F_BFu1s_BFu0c)
//============================================================================


struct  F_BFu1s_BFu0i  {
  float v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 F_BFu1s_BFu0i) C1{ Fi Fs:1 Fi:0}



static void Test_F_BFu1s_BFu0i()
{
  {
    init_simple_test("F_BFu1s_BFu0i");
    static STRUCT_IF_C F_BFu1s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1s_BFu0i, F_BFu1s_BFu0i)
//============================================================================


struct  F_BFu1s_BFu0ll  {
  float v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 F_BFu1s_BFu0ll) C1{ Fi Fs:1 FL:0}



static void Test_F_BFu1s_BFu0ll()
{
  {
    init_simple_test("F_BFu1s_BFu0ll");
    static STRUCT_IF_C F_BFu1s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1s_BFu0ll, F_BFu1s_BFu0ll)
//============================================================================


struct  F_BFu1s_BFu0s  {
  float v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 F_BFu1s_BFu0s) C1{ Fi Fs:1 Fs:0}



static void Test_F_BFu1s_BFu0s()
{
  {
    init_simple_test("F_BFu1s_BFu0s");
    static STRUCT_IF_C F_BFu1s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu1s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "F_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu1s_BFu0s, F_BFu1s_BFu0s)
//============================================================================


struct  F_BFu31i_BFu0c  {
  float v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 F_BFu31i_BFu0c) C1{ Fi Fi:31 Fc:0}



static void Test_F_BFu31i_BFu0c()
{
  {
    init_simple_test("F_BFu31i_BFu0c");
    static STRUCT_IF_C F_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31i_BFu0c, F_BFu31i_BFu0c)
//============================================================================


struct  F_BFu31i_BFu0i  {
  float v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 F_BFu31i_BFu0i) C1{ Fi Fi:31 Fi:0}



static void Test_F_BFu31i_BFu0i()
{
  {
    init_simple_test("F_BFu31i_BFu0i");
    static STRUCT_IF_C F_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31i_BFu0i, F_BFu31i_BFu0i)
//============================================================================


struct  F_BFu31i_BFu0ll  {
  float v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 F_BFu31i_BFu0ll) C1{ Fi Fi:31 FL:0}



static void Test_F_BFu31i_BFu0ll()
{
  {
    init_simple_test("F_BFu31i_BFu0ll");
    static STRUCT_IF_C F_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31i_BFu0ll, F_BFu31i_BFu0ll)
//============================================================================


struct  F_BFu31i_BFu0s  {
  float v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 F_BFu31i_BFu0s) C1{ Fi Fi:31 Fs:0}



static void Test_F_BFu31i_BFu0s()
{
  {
    init_simple_test("F_BFu31i_BFu0s");
    static STRUCT_IF_C F_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31i_BFu0s, F_BFu31i_BFu0s)
//============================================================================


struct  F_BFu31ll_BFu0c  {
  float v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 F_BFu31ll_BFu0c) C1{ Fi FL:31 Fc:0}



static void Test_F_BFu31ll_BFu0c()
{
  {
    init_simple_test("F_BFu31ll_BFu0c");
    static STRUCT_IF_C F_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31ll_BFu0c, F_BFu31ll_BFu0c)
//============================================================================


struct  F_BFu31ll_BFu0i  {
  float v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 F_BFu31ll_BFu0i) C1{ Fi FL:31 Fi:0}



static void Test_F_BFu31ll_BFu0i()
{
  {
    init_simple_test("F_BFu31ll_BFu0i");
    static STRUCT_IF_C F_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31ll_BFu0i, F_BFu31ll_BFu0i)
//============================================================================


struct  F_BFu31ll_BFu0ll  {
  float v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 F_BFu31ll_BFu0ll) C1{ Fi FL:31 FL:0}



static void Test_F_BFu31ll_BFu0ll()
{
  {
    init_simple_test("F_BFu31ll_BFu0ll");
    static STRUCT_IF_C F_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31ll_BFu0ll, F_BFu31ll_BFu0ll)
//============================================================================


struct  F_BFu31ll_BFu0s  {
  float v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 F_BFu31ll_BFu0s) C1{ Fi FL:31 Fs:0}



static void Test_F_BFu31ll_BFu0s()
{
  {
    init_simple_test("F_BFu31ll_BFu0s");
    static STRUCT_IF_C F_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "F_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "F_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu31ll_BFu0s, F_BFu31ll_BFu0s)
//============================================================================


struct  F_BFu32i_BFu0c  {
  float v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 F_BFu32i_BFu0c) C1{ Fi Fi:32 Fc:0}



static void Test_F_BFu32i_BFu0c()
{
  {
    init_simple_test("F_BFu32i_BFu0c");
    static STRUCT_IF_C F_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32i_BFu0c, F_BFu32i_BFu0c)
//============================================================================


struct  F_BFu32i_BFu0i  {
  float v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 F_BFu32i_BFu0i) C1{ Fi Fi:32 Fi:0}



static void Test_F_BFu32i_BFu0i()
{
  {
    init_simple_test("F_BFu32i_BFu0i");
    static STRUCT_IF_C F_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32i_BFu0i, F_BFu32i_BFu0i)
//============================================================================


struct  F_BFu32i_BFu0ll  {
  float v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 F_BFu32i_BFu0ll) C1{ Fi Fi:32 FL:0}



static void Test_F_BFu32i_BFu0ll()
{
  {
    init_simple_test("F_BFu32i_BFu0ll");
    static STRUCT_IF_C F_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32i_BFu0ll, F_BFu32i_BFu0ll)
//============================================================================


struct  F_BFu32i_BFu0s  {
  float v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 F_BFu32i_BFu0s) C1{ Fi Fi:32 Fs:0}



static void Test_F_BFu32i_BFu0s()
{
  {
    init_simple_test("F_BFu32i_BFu0s");
    static STRUCT_IF_C F_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32i_BFu0s, F_BFu32i_BFu0s)
//============================================================================


struct  F_BFu32ll_BFu0c  {
  float v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 F_BFu32ll_BFu0c) C1{ Fi FL:32 Fc:0}



static void Test_F_BFu32ll_BFu0c()
{
  {
    init_simple_test("F_BFu32ll_BFu0c");
    static STRUCT_IF_C F_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32ll_BFu0c, F_BFu32ll_BFu0c)
//============================================================================


struct  F_BFu32ll_BFu0i  {
  float v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 F_BFu32ll_BFu0i) C1{ Fi FL:32 Fi:0}



static void Test_F_BFu32ll_BFu0i()
{
  {
    init_simple_test("F_BFu32ll_BFu0i");
    static STRUCT_IF_C F_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32ll_BFu0i, F_BFu32ll_BFu0i)
//============================================================================


struct  F_BFu32ll_BFu0ll  {
  float v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 F_BFu32ll_BFu0ll) C1{ Fi FL:32 FL:0}



static void Test_F_BFu32ll_BFu0ll()
{
  {
    init_simple_test("F_BFu32ll_BFu0ll");
    static STRUCT_IF_C F_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32ll_BFu0ll, F_BFu32ll_BFu0ll)
//============================================================================


struct  F_BFu32ll_BFu0s  {
  float v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 F_BFu32ll_BFu0s) C1{ Fi FL:32 Fs:0}



static void Test_F_BFu32ll_BFu0s()
{
  {
    init_simple_test("F_BFu32ll_BFu0s");
    static STRUCT_IF_C F_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "F_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "F_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu32ll_BFu0s, F_BFu32ll_BFu0s)
//============================================================================


struct  F_BFu33_BFu0c  {
  float v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 F_BFu33_BFu0c) C1{ Fi FL:33 Fc:0}



static void Test_F_BFu33_BFu0c()
{
  {
    init_simple_test("F_BFu33_BFu0c");
    static STRUCT_IF_C F_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu33_BFu0c, F_BFu33_BFu0c)
//============================================================================


struct  F_BFu33_BFu0i  {
  float v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 F_BFu33_BFu0i) C1{ Fi FL:33 Fi:0}



static void Test_F_BFu33_BFu0i()
{
  {
    init_simple_test("F_BFu33_BFu0i");
    static STRUCT_IF_C F_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu33_BFu0i, F_BFu33_BFu0i)
//============================================================================


struct  F_BFu33_BFu0ll  {
  float v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 F_BFu33_BFu0ll) C1{ Fi FL:33 FL:0}



static void Test_F_BFu33_BFu0ll()
{
  {
    init_simple_test("F_BFu33_BFu0ll");
    static STRUCT_IF_C F_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu33_BFu0ll, F_BFu33_BFu0ll)
//============================================================================


struct  F_BFu33_BFu0s  {
  float v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 F_BFu33_BFu0s) C1{ Fi FL:33 Fs:0}



static void Test_F_BFu33_BFu0s()
{
  {
    init_simple_test("F_BFu33_BFu0s");
    static STRUCT_IF_C F_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "F_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "F_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu33_BFu0s, F_BFu33_BFu0s)
//============================================================================


struct  F_BFu7c_BFu0c  {
  float v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 F_BFu7c_BFu0c) C1{ Fi Fc:7 Fc:0}



static void Test_F_BFu7c_BFu0c()
{
  {
    init_simple_test("F_BFu7c_BFu0c");
    static STRUCT_IF_C F_BFu7c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7c_BFu0c, F_BFu7c_BFu0c)
//============================================================================


struct  F_BFu7c_BFu0i  {
  float v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 F_BFu7c_BFu0i) C1{ Fi Fc:7 Fi:0}



static void Test_F_BFu7c_BFu0i()
{
  {
    init_simple_test("F_BFu7c_BFu0i");
    static STRUCT_IF_C F_BFu7c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7c_BFu0i, F_BFu7c_BFu0i)
//============================================================================


struct  F_BFu7c_BFu0ll  {
  float v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 F_BFu7c_BFu0ll) C1{ Fi Fc:7 FL:0}



static void Test_F_BFu7c_BFu0ll()
{
  {
    init_simple_test("F_BFu7c_BFu0ll");
    static STRUCT_IF_C F_BFu7c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7c_BFu0ll, F_BFu7c_BFu0ll)
//============================================================================


struct  F_BFu7c_BFu0s  {
  float v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 F_BFu7c_BFu0s) C1{ Fi Fc:7 Fs:0}



static void Test_F_BFu7c_BFu0s()
{
  {
    init_simple_test("F_BFu7c_BFu0s");
    static STRUCT_IF_C F_BFu7c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7c_BFu0s, F_BFu7c_BFu0s)
//============================================================================


struct  F_BFu7i_BFu0c  {
  float v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 F_BFu7i_BFu0c) C1{ Fi Fi:7 Fc:0}



static void Test_F_BFu7i_BFu0c()
{
  {
    init_simple_test("F_BFu7i_BFu0c");
    static STRUCT_IF_C F_BFu7i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7i_BFu0c, F_BFu7i_BFu0c)
//============================================================================


struct  F_BFu7i_BFu0i  {
  float v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 F_BFu7i_BFu0i) C1{ Fi Fi:7 Fi:0}



static void Test_F_BFu7i_BFu0i()
{
  {
    init_simple_test("F_BFu7i_BFu0i");
    static STRUCT_IF_C F_BFu7i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7i_BFu0i, F_BFu7i_BFu0i)
//============================================================================


struct  F_BFu7i_BFu0ll  {
  float v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 F_BFu7i_BFu0ll) C1{ Fi Fi:7 FL:0}



static void Test_F_BFu7i_BFu0ll()
{
  {
    init_simple_test("F_BFu7i_BFu0ll");
    static STRUCT_IF_C F_BFu7i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7i_BFu0ll, F_BFu7i_BFu0ll)
//============================================================================


struct  F_BFu7i_BFu0s  {
  float v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 F_BFu7i_BFu0s) C1{ Fi Fi:7 Fs:0}



static void Test_F_BFu7i_BFu0s()
{
  {
    init_simple_test("F_BFu7i_BFu0s");
    static STRUCT_IF_C F_BFu7i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7i_BFu0s, F_BFu7i_BFu0s)
//============================================================================


struct  F_BFu7ll_BFu0c  {
  float v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 F_BFu7ll_BFu0c) C1{ Fi FL:7 Fc:0}



static void Test_F_BFu7ll_BFu0c()
{
  {
    init_simple_test("F_BFu7ll_BFu0c");
    static STRUCT_IF_C F_BFu7ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7ll_BFu0c, F_BFu7ll_BFu0c)
//============================================================================


struct  F_BFu7ll_BFu0i  {
  float v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 F_BFu7ll_BFu0i) C1{ Fi FL:7 Fi:0}



static void Test_F_BFu7ll_BFu0i()
{
  {
    init_simple_test("F_BFu7ll_BFu0i");
    static STRUCT_IF_C F_BFu7ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7ll_BFu0i, F_BFu7ll_BFu0i)
//============================================================================


struct  F_BFu7ll_BFu0ll  {
  float v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 F_BFu7ll_BFu0ll) C1{ Fi FL:7 FL:0}



static void Test_F_BFu7ll_BFu0ll()
{
  {
    init_simple_test("F_BFu7ll_BFu0ll");
    static STRUCT_IF_C F_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7ll_BFu0ll, F_BFu7ll_BFu0ll)
//============================================================================


struct  F_BFu7ll_BFu0s  {
  float v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 F_BFu7ll_BFu0s) C1{ Fi FL:7 Fs:0}



static void Test_F_BFu7ll_BFu0s()
{
  {
    init_simple_test("F_BFu7ll_BFu0s");
    static STRUCT_IF_C F_BFu7ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7ll_BFu0s, F_BFu7ll_BFu0s)
//============================================================================


struct  F_BFu7s_BFu0c  {
  float v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 F_BFu7s_BFu0c) C1{ Fi Fs:7 Fc:0}



static void Test_F_BFu7s_BFu0c()
{
  {
    init_simple_test("F_BFu7s_BFu0c");
    static STRUCT_IF_C F_BFu7s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7s_BFu0c, F_BFu7s_BFu0c)
//============================================================================


struct  F_BFu7s_BFu0i  {
  float v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 F_BFu7s_BFu0i) C1{ Fi Fs:7 Fi:0}



static void Test_F_BFu7s_BFu0i()
{
  {
    init_simple_test("F_BFu7s_BFu0i");
    static STRUCT_IF_C F_BFu7s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7s_BFu0i, F_BFu7s_BFu0i)
//============================================================================


struct  F_BFu7s_BFu0ll  {
  float v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 F_BFu7s_BFu0ll) C1{ Fi Fs:7 FL:0}



static void Test_F_BFu7s_BFu0ll()
{
  {
    init_simple_test("F_BFu7s_BFu0ll");
    static STRUCT_IF_C F_BFu7s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7s_BFu0ll, F_BFu7s_BFu0ll)
//============================================================================


struct  F_BFu7s_BFu0s  {
  float v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 F_BFu7s_BFu0s) C1{ Fi Fs:7 Fs:0}



static void Test_F_BFu7s_BFu0s()
{
  {
    init_simple_test("F_BFu7s_BFu0s");
    static STRUCT_IF_C F_BFu7s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu7s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "F_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "F_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu7s_BFu0s, F_BFu7s_BFu0s)
//============================================================================


struct  F_BFu8c_BFu0c  {
  float v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 F_BFu8c_BFu0c) C1{ Fi Fc:8 Fc:0}



static void Test_F_BFu8c_BFu0c()
{
  {
    init_simple_test("F_BFu8c_BFu0c");
    static STRUCT_IF_C F_BFu8c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8c_BFu0c, F_BFu8c_BFu0c)
//============================================================================


struct  F_BFu8c_BFu0i  {
  float v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 F_BFu8c_BFu0i) C1{ Fi Fc:8 Fi:0}



static void Test_F_BFu8c_BFu0i()
{
  {
    init_simple_test("F_BFu8c_BFu0i");
    static STRUCT_IF_C F_BFu8c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8c_BFu0i, F_BFu8c_BFu0i)
//============================================================================


struct  F_BFu8c_BFu0ll  {
  float v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 F_BFu8c_BFu0ll) C1{ Fi Fc:8 FL:0}



static void Test_F_BFu8c_BFu0ll()
{
  {
    init_simple_test("F_BFu8c_BFu0ll");
    static STRUCT_IF_C F_BFu8c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8c_BFu0ll, F_BFu8c_BFu0ll)
//============================================================================


struct  F_BFu8c_BFu0s  {
  float v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 F_BFu8c_BFu0s) C1{ Fi Fc:8 Fs:0}



static void Test_F_BFu8c_BFu0s()
{
  {
    init_simple_test("F_BFu8c_BFu0s");
    static STRUCT_IF_C F_BFu8c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8c_BFu0s, F_BFu8c_BFu0s)
//============================================================================


struct  F_BFu8i_BFu0c  {
  float v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 F_BFu8i_BFu0c) C1{ Fi Fi:8 Fc:0}



static void Test_F_BFu8i_BFu0c()
{
  {
    init_simple_test("F_BFu8i_BFu0c");
    static STRUCT_IF_C F_BFu8i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8i_BFu0c, F_BFu8i_BFu0c)
//============================================================================


struct  F_BFu8i_BFu0i  {
  float v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 F_BFu8i_BFu0i) C1{ Fi Fi:8 Fi:0}



static void Test_F_BFu8i_BFu0i()
{
  {
    init_simple_test("F_BFu8i_BFu0i");
    static STRUCT_IF_C F_BFu8i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8i_BFu0i, F_BFu8i_BFu0i)
//============================================================================


struct  F_BFu8i_BFu0ll  {
  float v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 F_BFu8i_BFu0ll) C1{ Fi Fi:8 FL:0}



static void Test_F_BFu8i_BFu0ll()
{
  {
    init_simple_test("F_BFu8i_BFu0ll");
    static STRUCT_IF_C F_BFu8i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8i_BFu0ll, F_BFu8i_BFu0ll)
//============================================================================


struct  F_BFu8i_BFu0s  {
  float v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 F_BFu8i_BFu0s) C1{ Fi Fi:8 Fs:0}



static void Test_F_BFu8i_BFu0s()
{
  {
    init_simple_test("F_BFu8i_BFu0s");
    static STRUCT_IF_C F_BFu8i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8i_BFu0s, F_BFu8i_BFu0s)
//============================================================================


struct  F_BFu8ll_BFu0c  {
  float v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 F_BFu8ll_BFu0c) C1{ Fi FL:8 Fc:0}



static void Test_F_BFu8ll_BFu0c()
{
  {
    init_simple_test("F_BFu8ll_BFu0c");
    static STRUCT_IF_C F_BFu8ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8ll_BFu0c, F_BFu8ll_BFu0c)
//============================================================================


struct  F_BFu8ll_BFu0i  {
  float v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 F_BFu8ll_BFu0i) C1{ Fi FL:8 Fi:0}



static void Test_F_BFu8ll_BFu0i()
{
  {
    init_simple_test("F_BFu8ll_BFu0i");
    static STRUCT_IF_C F_BFu8ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8ll_BFu0i, F_BFu8ll_BFu0i)
//============================================================================


struct  F_BFu8ll_BFu0ll  {
  float v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 F_BFu8ll_BFu0ll) C1{ Fi FL:8 FL:0}



static void Test_F_BFu8ll_BFu0ll()
{
  {
    init_simple_test("F_BFu8ll_BFu0ll");
    static STRUCT_IF_C F_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8ll_BFu0ll, F_BFu8ll_BFu0ll)
//============================================================================


struct  F_BFu8ll_BFu0s  {
  float v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 F_BFu8ll_BFu0s) C1{ Fi FL:8 Fs:0}



static void Test_F_BFu8ll_BFu0s()
{
  {
    init_simple_test("F_BFu8ll_BFu0s");
    static STRUCT_IF_C F_BFu8ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8ll_BFu0s, F_BFu8ll_BFu0s)
//============================================================================


struct  F_BFu8s_BFu0c  {
  float v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 F_BFu8s_BFu0c) C1{ Fi Fs:8 Fc:0}



static void Test_F_BFu8s_BFu0c()
{
  {
    init_simple_test("F_BFu8s_BFu0c");
    static STRUCT_IF_C F_BFu8s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8s_BFu0c, F_BFu8s_BFu0c)
//============================================================================


struct  F_BFu8s_BFu0i  {
  float v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 F_BFu8s_BFu0i) C1{ Fi Fs:8 Fi:0}



static void Test_F_BFu8s_BFu0i()
{
  {
    init_simple_test("F_BFu8s_BFu0i");
    static STRUCT_IF_C F_BFu8s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8s_BFu0i, F_BFu8s_BFu0i)
//============================================================================


struct  F_BFu8s_BFu0ll  {
  float v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 F_BFu8s_BFu0ll) C1{ Fi Fs:8 FL:0}



static void Test_F_BFu8s_BFu0ll()
{
  {
    init_simple_test("F_BFu8s_BFu0ll");
    static STRUCT_IF_C F_BFu8s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8s_BFu0ll, F_BFu8s_BFu0ll)
//============================================================================


struct  F_BFu8s_BFu0s  {
  float v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 F_BFu8s_BFu0s) C1{ Fi Fs:8 Fs:0}



static void Test_F_BFu8s_BFu0s()
{
  {
    init_simple_test("F_BFu8s_BFu0s");
    static STRUCT_IF_C F_BFu8s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu8s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "F_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "F_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu8s_BFu0s, F_BFu8s_BFu0s)
//============================================================================


struct  F_BFu9i_BFu0c  {
  float v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 F_BFu9i_BFu0c) C1{ Fi Fi:9 Fc:0}



static void Test_F_BFu9i_BFu0c()
{
  {
    init_simple_test("F_BFu9i_BFu0c");
    static STRUCT_IF_C F_BFu9i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9i_BFu0c, F_BFu9i_BFu0c)
//============================================================================


struct  F_BFu9i_BFu0i  {
  float v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 F_BFu9i_BFu0i) C1{ Fi Fi:9 Fi:0}



static void Test_F_BFu9i_BFu0i()
{
  {
    init_simple_test("F_BFu9i_BFu0i");
    static STRUCT_IF_C F_BFu9i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9i_BFu0i, F_BFu9i_BFu0i)
//============================================================================


struct  F_BFu9i_BFu0ll  {
  float v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 F_BFu9i_BFu0ll) C1{ Fi Fi:9 FL:0}



static void Test_F_BFu9i_BFu0ll()
{
  {
    init_simple_test("F_BFu9i_BFu0ll");
    static STRUCT_IF_C F_BFu9i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9i_BFu0ll, F_BFu9i_BFu0ll)
//============================================================================


struct  F_BFu9i_BFu0s  {
  float v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 F_BFu9i_BFu0s) C1{ Fi Fi:9 Fs:0}



static void Test_F_BFu9i_BFu0s()
{
  {
    init_simple_test("F_BFu9i_BFu0s");
    static STRUCT_IF_C F_BFu9i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9i_BFu0s, F_BFu9i_BFu0s)
//============================================================================


struct  F_BFu9ll_BFu0c  {
  float v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 F_BFu9ll_BFu0c) C1{ Fi FL:9 Fc:0}



static void Test_F_BFu9ll_BFu0c()
{
  {
    init_simple_test("F_BFu9ll_BFu0c");
    static STRUCT_IF_C F_BFu9ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9ll_BFu0c, F_BFu9ll_BFu0c)
//============================================================================


struct  F_BFu9ll_BFu0i  {
  float v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 F_BFu9ll_BFu0i) C1{ Fi FL:9 Fi:0}



static void Test_F_BFu9ll_BFu0i()
{
  {
    init_simple_test("F_BFu9ll_BFu0i");
    static STRUCT_IF_C F_BFu9ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9ll_BFu0i, F_BFu9ll_BFu0i)
//============================================================================


struct  F_BFu9ll_BFu0ll  {
  float v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 F_BFu9ll_BFu0ll) C1{ Fi FL:9 FL:0}



static void Test_F_BFu9ll_BFu0ll()
{
  {
    init_simple_test("F_BFu9ll_BFu0ll");
    static STRUCT_IF_C F_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9ll_BFu0ll, F_BFu9ll_BFu0ll)
//============================================================================


struct  F_BFu9ll_BFu0s  {
  float v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 F_BFu9ll_BFu0s) C1{ Fi FL:9 Fs:0}



static void Test_F_BFu9ll_BFu0s()
{
  {
    init_simple_test("F_BFu9ll_BFu0s");
    static STRUCT_IF_C F_BFu9ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9ll_BFu0s, F_BFu9ll_BFu0s)
//============================================================================


struct  F_BFu9s_BFu0c  {
  float v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 F_BFu9s_BFu0c) C1{ Fi Fs:9 Fc:0}



static void Test_F_BFu9s_BFu0c()
{
  {
    init_simple_test("F_BFu9s_BFu0c");
    static STRUCT_IF_C F_BFu9s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "F_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9s_BFu0c, F_BFu9s_BFu0c)
//============================================================================


struct  F_BFu9s_BFu0i  {
  float v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 F_BFu9s_BFu0i) C1{ Fi Fs:9 Fi:0}



static void Test_F_BFu9s_BFu0i()
{
  {
    init_simple_test("F_BFu9s_BFu0i");
    static STRUCT_IF_C F_BFu9s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "F_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9s_BFu0i, F_BFu9s_BFu0i)
//============================================================================


struct  F_BFu9s_BFu0ll  {
  float v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 F_BFu9s_BFu0ll) C1{ Fi Fs:9 FL:0}



static void Test_F_BFu9s_BFu0ll()
{
  {
    init_simple_test("F_BFu9s_BFu0ll");
    static STRUCT_IF_C F_BFu9s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9s_BFu0ll, F_BFu9s_BFu0ll)
//============================================================================


struct  F_BFu9s_BFu0s  {
  float v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 F_BFu9s_BFu0s) C1{ Fi Fs:9 Fs:0}



static void Test_F_BFu9s_BFu0s()
{
  {
    init_simple_test("F_BFu9s_BFu0s");
    static STRUCT_IF_C F_BFu9s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_BFu9s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "F_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "F_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "F_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_F_BFu9s_BFu0s, F_BFu9s_BFu0s)
//============================================================================


struct  F_C_BFu0c  {
  float v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 F_C_BFu0c) C1{ Fi Fc Fc:0}



static void Test_F_C_BFu0c()
{
  {
    init_simple_test("F_C_BFu0c");
    static STRUCT_IF_C F_C_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_C_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_C_BFu0c)");
    check_field_offset(lv, v1, 0, "F_C_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_C_BFu0c, F_C_BFu0c)
//============================================================================


struct  F_C_BFu0i  {
  float v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 F_C_BFu0i) C1{ Fi Fc Fi:0}



static void Test_F_C_BFu0i()
{
  {
    init_simple_test("F_C_BFu0i");
    static STRUCT_IF_C F_C_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_C_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_C_BFu0i)");
    check_field_offset(lv, v1, 0, "F_C_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_C_BFu0i, F_C_BFu0i)
//============================================================================


struct  F_C_BFu0ll  {
  float v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 F_C_BFu0ll) C1{ Fi Fc FL:0}



static void Test_F_C_BFu0ll()
{
  {
    init_simple_test("F_C_BFu0ll");
    static STRUCT_IF_C F_C_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_C_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_C_BFu0ll, F_C_BFu0ll)
//============================================================================


struct  F_C_BFu0s  {
  float v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 F_C_BFu0s) C1{ Fi Fc Fs:0}



static void Test_F_C_BFu0s()
{
  {
    init_simple_test("F_C_BFu0s");
    static STRUCT_IF_C F_C_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_C_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_C_BFu0s)");
    check_field_offset(lv, v1, 0, "F_C_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_C_BFu0s, F_C_BFu0s)
//============================================================================


struct  F_D_BFu0c  {
  float v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 F_D_BFu0c) C1{ Fi FL Fc:0}



static void Test_F_D_BFu0c()
{
  {
    init_simple_test("F_D_BFu0c");
    static STRUCT_IF_C F_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_D_BFu0c)");
    check_field_offset(lv, v1, 0, "F_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_D_BFu0c, F_D_BFu0c)
//============================================================================


struct  F_D_BFu0i  {
  float v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 F_D_BFu0i) C1{ Fi FL Fi:0}



static void Test_F_D_BFu0i()
{
  {
    init_simple_test("F_D_BFu0i");
    static STRUCT_IF_C F_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_D_BFu0i)");
    check_field_offset(lv, v1, 0, "F_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_D_BFu0i, F_D_BFu0i)
//============================================================================


struct  F_D_BFu0ll  {
  float v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 F_D_BFu0ll) C1{ Fi FL FL:0}



static void Test_F_D_BFu0ll()
{
  {
    init_simple_test("F_D_BFu0ll");
    static STRUCT_IF_C F_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_D_BFu0ll, F_D_BFu0ll)
//============================================================================


struct  F_D_BFu0s  {
  float v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 F_D_BFu0s) C1{ Fi FL Fs:0}



static void Test_F_D_BFu0s()
{
  {
    init_simple_test("F_D_BFu0s");
    static STRUCT_IF_C F_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_D_BFu0s)");
    check_field_offset(lv, v1, 0, "F_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_D_BFu0s, F_D_BFu0s)
//============================================================================


struct  F_F_BFu0c  {
  float v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 F_F_BFu0c) C1{ Fi[2] Fc:0}



static void Test_F_F_BFu0c()
{
  {
    init_simple_test("F_F_BFu0c");
    static STRUCT_IF_C F_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_F_BFu0c)");
    check_field_offset(lv, v1, 0, "F_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_F_BFu0c, F_F_BFu0c)
//============================================================================


struct  F_F_BFu0i  {
  float v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 F_F_BFu0i) C1{ Fi[2] Fi:0}



static void Test_F_F_BFu0i()
{
  {
    init_simple_test("F_F_BFu0i");
    static STRUCT_IF_C F_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_F_BFu0i)");
    check_field_offset(lv, v1, 0, "F_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_F_BFu0i, F_F_BFu0i)
//============================================================================


struct  F_F_BFu0ll  {
  float v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 F_F_BFu0ll) C1{ Fi[2] FL:0}



static void Test_F_F_BFu0ll()
{
  {
    init_simple_test("F_F_BFu0ll");
    static STRUCT_IF_C F_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_F_BFu0ll, F_F_BFu0ll)
//============================================================================


struct  F_F_BFu0s  {
  float v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 F_F_BFu0s) C1{ Fi[2] Fs:0}



static void Test_F_F_BFu0s()
{
  {
    init_simple_test("F_F_BFu0s");
    static STRUCT_IF_C F_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_F_BFu0s)");
    check_field_offset(lv, v1, 0, "F_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_F_BFu0s, F_F_BFu0s)
//============================================================================


struct  F_I_BFu0c  {
  float v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 F_I_BFu0c) C1{ Fi[2] Fc:0}



static void Test_F_I_BFu0c()
{
  {
    init_simple_test("F_I_BFu0c");
    static STRUCT_IF_C F_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_I_BFu0c)");
    check_field_offset(lv, v1, 0, "F_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_I_BFu0c, F_I_BFu0c)
//============================================================================


struct  F_I_BFu0i  {
  float v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 F_I_BFu0i) C1{ Fi[2] Fi:0}



static void Test_F_I_BFu0i()
{
  {
    init_simple_test("F_I_BFu0i");
    static STRUCT_IF_C F_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_I_BFu0i)");
    check_field_offset(lv, v1, 0, "F_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_I_BFu0i, F_I_BFu0i)
//============================================================================


struct  F_I_BFu0ll  {
  float v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 F_I_BFu0ll) C1{ Fi[2] FL:0}



static void Test_F_I_BFu0ll()
{
  {
    init_simple_test("F_I_BFu0ll");
    static STRUCT_IF_C F_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_I_BFu0ll, F_I_BFu0ll)
//============================================================================


struct  F_I_BFu0s  {
  float v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 F_I_BFu0s) C1{ Fi[2] Fs:0}



static void Test_F_I_BFu0s()
{
  {
    init_simple_test("F_I_BFu0s");
    static STRUCT_IF_C F_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_I_BFu0s)");
    check_field_offset(lv, v1, 0, "F_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_I_BFu0s, F_I_BFu0s)
//============================================================================


struct  F_Ip_BFu0c  {
  float v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 F_Ip_BFu0c) C1{ Fi Fp Fc:0}



static void Test_F_Ip_BFu0c()
{
  {
    init_simple_test("F_Ip_BFu0c");
    static STRUCT_IF_C F_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "F_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ip_BFu0c, F_Ip_BFu0c)
//============================================================================


struct  F_Ip_BFu0i  {
  float v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 F_Ip_BFu0i) C1{ Fi Fp Fi:0}



static void Test_F_Ip_BFu0i()
{
  {
    init_simple_test("F_Ip_BFu0i");
    static STRUCT_IF_C F_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "F_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ip_BFu0i, F_Ip_BFu0i)
//============================================================================


struct  F_Ip_BFu0ll  {
  float v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 F_Ip_BFu0ll) C1{ Fi Fp FL:0}



static void Test_F_Ip_BFu0ll()
{
  {
    init_simple_test("F_Ip_BFu0ll");
    static STRUCT_IF_C F_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ip_BFu0ll, F_Ip_BFu0ll)
//============================================================================


struct  F_Ip_BFu0s  {
  float v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 F_Ip_BFu0s) C1{ Fi Fp Fs:0}



static void Test_F_Ip_BFu0s()
{
  {
    init_simple_test("F_Ip_BFu0s");
    static STRUCT_IF_C F_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "F_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ip_BFu0s, F_Ip_BFu0s)
//============================================================================


struct  F_L_BFu0c  {
  float v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 F_L_BFu0c) C1{ Fi FL Fc:0}



static void Test_F_L_BFu0c()
{
  {
    init_simple_test("F_L_BFu0c");
    static STRUCT_IF_C F_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_L_BFu0c)");
    check_field_offset(lv, v1, 0, "F_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_L_BFu0c, F_L_BFu0c)
//============================================================================


struct  F_L_BFu0i  {
  float v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 F_L_BFu0i) C1{ Fi FL Fi:0}



static void Test_F_L_BFu0i()
{
  {
    init_simple_test("F_L_BFu0i");
    static STRUCT_IF_C F_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_L_BFu0i)");
    check_field_offset(lv, v1, 0, "F_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_L_BFu0i, F_L_BFu0i)
//============================================================================


struct  F_L_BFu0ll  {
  float v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 F_L_BFu0ll) C1{ Fi FL FL:0}



static void Test_F_L_BFu0ll()
{
  {
    init_simple_test("F_L_BFu0ll");
    static STRUCT_IF_C F_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_L_BFu0ll, F_L_BFu0ll)
//============================================================================


struct  F_L_BFu0s  {
  float v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 F_L_BFu0s) C1{ Fi FL Fs:0}



static void Test_F_L_BFu0s()
{
  {
    init_simple_test("F_L_BFu0s");
    static STRUCT_IF_C F_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_L_BFu0s)");
    check_field_offset(lv, v1, 0, "F_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_L_BFu0s, F_L_BFu0s)
//============================================================================


struct  F_S_BFu0c  {
  float v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 F_S_BFu0c) C1{ Fi Fs Fc:0}



static void Test_F_S_BFu0c()
{
  {
    init_simple_test("F_S_BFu0c");
    static STRUCT_IF_C F_S_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_S_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_S_BFu0c)");
    check_field_offset(lv, v1, 0, "F_S_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_S_BFu0c, F_S_BFu0c)
//============================================================================


struct  F_S_BFu0i  {
  float v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 F_S_BFu0i) C1{ Fi Fs Fi:0}



static void Test_F_S_BFu0i()
{
  {
    init_simple_test("F_S_BFu0i");
    static STRUCT_IF_C F_S_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_S_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_S_BFu0i)");
    check_field_offset(lv, v1, 0, "F_S_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_S_BFu0i, F_S_BFu0i)
//============================================================================


struct  F_S_BFu0ll  {
  float v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 F_S_BFu0ll) C1{ Fi Fs FL:0}



static void Test_F_S_BFu0ll()
{
  {
    init_simple_test("F_S_BFu0ll");
    static STRUCT_IF_C F_S_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_S_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_S_BFu0ll, F_S_BFu0ll)
//============================================================================


struct  F_S_BFu0s  {
  float v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 F_S_BFu0s) C1{ Fi Fs Fs:0}



static void Test_F_S_BFu0s()
{
  {
    init_simple_test("F_S_BFu0s");
    static STRUCT_IF_C F_S_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_S_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_S_BFu0s)");
    check_field_offset(lv, v1, 0, "F_S_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_S_BFu0s, F_S_BFu0s)
//============================================================================


struct  F_Uc_BFu0c  {
  float v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 F_Uc_BFu0c) C1{ Fi Fc Fc:0}



static void Test_F_Uc_BFu0c()
{
  {
    init_simple_test("F_Uc_BFu0c");
    static STRUCT_IF_C F_Uc_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_Uc_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "F_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Uc_BFu0c, F_Uc_BFu0c)
//============================================================================


struct  F_Uc_BFu0i  {
  float v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 F_Uc_BFu0i) C1{ Fi Fc Fi:0}



static void Test_F_Uc_BFu0i()
{
  {
    init_simple_test("F_Uc_BFu0i");
    static STRUCT_IF_C F_Uc_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_Uc_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "F_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Uc_BFu0i, F_Uc_BFu0i)
//============================================================================


struct  F_Uc_BFu0ll  {
  float v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 F_Uc_BFu0ll) C1{ Fi Fc FL:0}



static void Test_F_Uc_BFu0ll()
{
  {
    init_simple_test("F_Uc_BFu0ll");
    static STRUCT_IF_C F_Uc_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Uc_BFu0ll, F_Uc_BFu0ll)
//============================================================================


struct  F_Uc_BFu0s  {
  float v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 F_Uc_BFu0s) C1{ Fi Fc Fs:0}



static void Test_F_Uc_BFu0s()
{
  {
    init_simple_test("F_Uc_BFu0s");
    static STRUCT_IF_C F_Uc_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_Uc_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "F_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Uc_BFu0s, F_Uc_BFu0s)
//============================================================================


struct  F_Ui_BFu0c  {
  float v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 F_Ui_BFu0c) C1{ Fi[2] Fc:0}



static void Test_F_Ui_BFu0c()
{
  {
    init_simple_test("F_Ui_BFu0c");
    static STRUCT_IF_C F_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "F_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ui_BFu0c, F_Ui_BFu0c)
//============================================================================


struct  F_Ui_BFu0i  {
  float v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 F_Ui_BFu0i) C1{ Fi[2] Fi:0}



static void Test_F_Ui_BFu0i()
{
  {
    init_simple_test("F_Ui_BFu0i");
    static STRUCT_IF_C F_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "F_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ui_BFu0i, F_Ui_BFu0i)
//============================================================================


struct  F_Ui_BFu0ll  {
  float v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 F_Ui_BFu0ll) C1{ Fi[2] FL:0}



static void Test_F_Ui_BFu0ll()
{
  {
    init_simple_test("F_Ui_BFu0ll");
    static STRUCT_IF_C F_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ui_BFu0ll, F_Ui_BFu0ll)
//============================================================================


struct  F_Ui_BFu0s  {
  float v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 F_Ui_BFu0s) C1{ Fi[2] Fs:0}



static void Test_F_Ui_BFu0s()
{
  {
    init_simple_test("F_Ui_BFu0s");
    static STRUCT_IF_C F_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "F_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ui_BFu0s, F_Ui_BFu0s)
//============================================================================


struct  F_Ul_BFu0c  {
  float v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 F_Ul_BFu0c) C1{ Fi FL Fc:0}



static void Test_F_Ul_BFu0c()
{
  {
    init_simple_test("F_Ul_BFu0c");
    static STRUCT_IF_C F_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "F_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ul_BFu0c, F_Ul_BFu0c)
//============================================================================


struct  F_Ul_BFu0i  {
  float v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 F_Ul_BFu0i) C1{ Fi FL Fi:0}



static void Test_F_Ul_BFu0i()
{
  {
    init_simple_test("F_Ul_BFu0i");
    static STRUCT_IF_C F_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "F_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ul_BFu0i, F_Ul_BFu0i)
//============================================================================


struct  F_Ul_BFu0ll  {
  float v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 F_Ul_BFu0ll) C1{ Fi FL FL:0}



static void Test_F_Ul_BFu0ll()
{
  {
    init_simple_test("F_Ul_BFu0ll");
    static STRUCT_IF_C F_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ul_BFu0ll, F_Ul_BFu0ll)
//============================================================================


struct  F_Ul_BFu0s  {
  float v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 F_Ul_BFu0s) C1{ Fi FL Fs:0}



static void Test_F_Ul_BFu0s()
{
  {
    init_simple_test("F_Ul_BFu0s");
    static STRUCT_IF_C F_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(F_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "F_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Ul_BFu0s, F_Ul_BFu0s)
//============================================================================


struct  F_Us_BFu0c  {
  float v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 F_Us_BFu0c) C1{ Fi Fs Fc:0}



static void Test_F_Us_BFu0c()
{
  {
    init_simple_test("F_Us_BFu0c");
    static STRUCT_IF_C F_Us_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(F_Us_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(F_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "F_Us_BFu0c.v1");
    check_field_offset(lv, v2, 4, "F_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Us_BFu0c, F_Us_BFu0c)
//============================================================================


struct  F_Us_BFu0i  {
  float v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 F_Us_BFu0i) C1{ Fi Fs Fi:0}



static void Test_F_Us_BFu0i()
{
  {
    init_simple_test("F_Us_BFu0i");
    static STRUCT_IF_C F_Us_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(F_Us_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(F_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "F_Us_BFu0i.v1");
    check_field_offset(lv, v2, 4, "F_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Us_BFu0i, F_Us_BFu0i)
//============================================================================


struct  F_Us_BFu0ll  {
  float v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 F_Us_BFu0ll) C1{ Fi Fs FL:0}



static void Test_F_Us_BFu0ll()
{
  {
    init_simple_test("F_Us_BFu0ll");
    static STRUCT_IF_C F_Us_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(F_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(F_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "F_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Us_BFu0ll, F_Us_BFu0ll)
//============================================================================


struct  F_Us_BFu0s  {
  float v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 F_Us_BFu0s) C1{ Fi Fs Fs:0}



static void Test_F_Us_BFu0s()
{
  {
    init_simple_test("F_Us_BFu0s");
    static STRUCT_IF_C F_Us_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(F_Us_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(F_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "F_Us_BFu0s.v1");
    check_field_offset(lv, v2, 4, "F_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Us_BFu0s, F_Us_BFu0s)
//============================================================================


struct  F_Vp_BFu0c  {
  float v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 F_Vp_BFu0c) C1{ Fi Fp Fc:0}



static void Test_F_Vp_BFu0c()
{
  {
    init_simple_test("F_Vp_BFu0c");
    static STRUCT_IF_C F_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "F_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Vp_BFu0c, F_Vp_BFu0c)
//============================================================================


struct  F_Vp_BFu0i  {
  float v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 F_Vp_BFu0i) C1{ Fi Fp Fi:0}



static void Test_F_Vp_BFu0i()
{
  {
    init_simple_test("F_Vp_BFu0i");
    static STRUCT_IF_C F_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "F_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Vp_BFu0i, F_Vp_BFu0i)
//============================================================================


struct  F_Vp_BFu0ll  {
  float v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 F_Vp_BFu0ll) C1{ Fi Fp FL:0}



static void Test_F_Vp_BFu0ll()
{
  {
    init_simple_test("F_Vp_BFu0ll");
    static STRUCT_IF_C F_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "F_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Vp_BFu0ll, F_Vp_BFu0ll)
//============================================================================


struct  F_Vp_BFu0s  {
  float v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 F_Vp_BFu0s) C1{ Fi Fp Fs:0}



static void Test_F_Vp_BFu0s()
{
  {
    init_simple_test("F_Vp_BFu0s");
    static STRUCT_IF_C F_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(F_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(F_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "F_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "F_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_F_Vp_BFu0s, F_Vp_BFu0s)
//============================================================================


struct  I_BFu0c  {
  int v1;
  unsigned char  :0;
};
//SIG(1 I_BFu0c) C1{ Fi Fc:0}



static void Test_I_BFu0c()
{
  {
    init_simple_test("I_BFu0c");
    static STRUCT_IF_C I_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c, I_BFu0c)
//============================================================================


struct  I_BFu0c_BFu0c  {
  int v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 I_BFu0c_BFu0c) C1{ Fi Fc:0 Fc:0}



static void Test_I_BFu0c_BFu0c()
{
  {
    init_simple_test("I_BFu0c_BFu0c");
    static STRUCT_IF_C I_BFu0c_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu0c, I_BFu0c_BFu0c)
//============================================================================


struct  I_BFu0c_BFu0i  {
  int v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 I_BFu0c_BFu0i) C1{ Fi Fc:0 Fi:0}



static void Test_I_BFu0c_BFu0i()
{
  {
    init_simple_test("I_BFu0c_BFu0i");
    static STRUCT_IF_C I_BFu0c_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu0i, I_BFu0c_BFu0i)
//============================================================================


struct  I_BFu0c_BFu0ll  {
  int v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 I_BFu0c_BFu0ll) C1{ Fi Fc:0 FL:0}



static void Test_I_BFu0c_BFu0ll()
{
  {
    init_simple_test("I_BFu0c_BFu0ll");
    static STRUCT_IF_C I_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu0ll, I_BFu0c_BFu0ll)
//============================================================================


struct  I_BFu0c_BFu0s  {
  int v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 I_BFu0c_BFu0s) C1{ Fi Fc:0 Fs:0}



static void Test_I_BFu0c_BFu0s()
{
  {
    init_simple_test("I_BFu0c_BFu0s");
    static STRUCT_IF_C I_BFu0c_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu0s, I_BFu0c_BFu0s)
//============================================================================


struct  I_BFu0c_BFu15i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 I_BFu0c_BFu15i) C1{ Fi Fc:0 Fi:15}



static void Test_I_BFu0c_BFu15i()
{
  {
    init_simple_test("I_BFu0c_BFu15i");
    static STRUCT_IF_C I_BFu0c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu15i, I_BFu0c_BFu15i)
//============================================================================


struct  I_BFu0c_BFu15ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 I_BFu0c_BFu15ll) C1{ Fi Fc:0 FL:15}



static void Test_I_BFu0c_BFu15ll()
{
  {
    init_simple_test("I_BFu0c_BFu15ll");
    static STRUCT_IF_C I_BFu0c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu15ll, I_BFu0c_BFu15ll)
//============================================================================


struct  I_BFu0c_BFu15s  {
  int v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 I_BFu0c_BFu15s) C1{ Fi Fc:0 Fs:15}



static void Test_I_BFu0c_BFu15s()
{
  {
    init_simple_test("I_BFu0c_BFu15s");
    static STRUCT_IF_C I_BFu0c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu15s, I_BFu0c_BFu15s)
//============================================================================


struct  I_BFu0c_BFu16i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 I_BFu0c_BFu16i) C1{ Fi Fc:0 Fi:16}



static void Test_I_BFu0c_BFu16i()
{
  {
    init_simple_test("I_BFu0c_BFu16i");
    static STRUCT_IF_C I_BFu0c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu16i, I_BFu0c_BFu16i)
//============================================================================


struct  I_BFu0c_BFu16ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 I_BFu0c_BFu16ll) C1{ Fi Fc:0 FL:16}



static void Test_I_BFu0c_BFu16ll()
{
  {
    init_simple_test("I_BFu0c_BFu16ll");
    static STRUCT_IF_C I_BFu0c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu16ll, I_BFu0c_BFu16ll)
//============================================================================


struct  I_BFu0c_BFu16s  {
  int v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 I_BFu0c_BFu16s) C1{ Fi Fc:0 Fs:16}



static void Test_I_BFu0c_BFu16s()
{
  {
    init_simple_test("I_BFu0c_BFu16s");
    static STRUCT_IF_C I_BFu0c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu16s, I_BFu0c_BFu16s)
//============================================================================


struct  I_BFu0c_BFu17i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 I_BFu0c_BFu17i) C1{ Fi Fc:0 Fi:17}



static void Test_I_BFu0c_BFu17i()
{
  {
    init_simple_test("I_BFu0c_BFu17i");
    static STRUCT_IF_C I_BFu0c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu17i, I_BFu0c_BFu17i)
//============================================================================


struct  I_BFu0c_BFu17ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 I_BFu0c_BFu17ll) C1{ Fi Fc:0 FL:17}



static void Test_I_BFu0c_BFu17ll()
{
  {
    init_simple_test("I_BFu0c_BFu17ll");
    static STRUCT_IF_C I_BFu0c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu17ll, I_BFu0c_BFu17ll)
//============================================================================


struct  I_BFu0c_BFu1c  {
  int v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 I_BFu0c_BFu1c) C1{ Fi Fc:0 Fc:1}



static void Test_I_BFu0c_BFu1c()
{
  {
    init_simple_test("I_BFu0c_BFu1c");
    static STRUCT_IF_C I_BFu0c_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu1c, I_BFu0c_BFu1c)
//============================================================================


struct  I_BFu0c_BFu1i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 I_BFu0c_BFu1i) C1{ Fi Fc:0 Fi:1}



static void Test_I_BFu0c_BFu1i()
{
  {
    init_simple_test("I_BFu0c_BFu1i");
    static STRUCT_IF_C I_BFu0c_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu1i, I_BFu0c_BFu1i)
//============================================================================


struct  I_BFu0c_BFu1ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 I_BFu0c_BFu1ll) C1{ Fi Fc:0 FL:1}



static void Test_I_BFu0c_BFu1ll()
{
  {
    init_simple_test("I_BFu0c_BFu1ll");
    static STRUCT_IF_C I_BFu0c_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu1ll, I_BFu0c_BFu1ll)
//============================================================================


struct  I_BFu0c_BFu1s  {
  int v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 I_BFu0c_BFu1s) C1{ Fi Fc:0 Fs:1}



static void Test_I_BFu0c_BFu1s()
{
  {
    init_simple_test("I_BFu0c_BFu1s");
    static STRUCT_IF_C I_BFu0c_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu1s, I_BFu0c_BFu1s)
//============================================================================


struct  I_BFu0c_BFu31i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 I_BFu0c_BFu31i) C1{ Fi Fc:0 Fi:31}



static void Test_I_BFu0c_BFu31i()
{
  {
    init_simple_test("I_BFu0c_BFu31i");
    static STRUCT_IF_C I_BFu0c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu31i, I_BFu0c_BFu31i)
//============================================================================


struct  I_BFu0c_BFu31ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 I_BFu0c_BFu31ll) C1{ Fi Fc:0 FL:31}



static void Test_I_BFu0c_BFu31ll()
{
  {
    init_simple_test("I_BFu0c_BFu31ll");
    static STRUCT_IF_C I_BFu0c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu31ll, I_BFu0c_BFu31ll)
//============================================================================


struct  I_BFu0c_BFu32i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 I_BFu0c_BFu32i) C1{ Fi Fc:0 Fi:32}



static void Test_I_BFu0c_BFu32i()
{
  {
    init_simple_test("I_BFu0c_BFu32i");
    static STRUCT_IF_C I_BFu0c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu32i, I_BFu0c_BFu32i)
//============================================================================


struct  I_BFu0c_BFu32ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 I_BFu0c_BFu32ll) C1{ Fi Fc:0 FL:32}



static void Test_I_BFu0c_BFu32ll()
{
  {
    init_simple_test("I_BFu0c_BFu32ll");
    static STRUCT_IF_C I_BFu0c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu32ll, I_BFu0c_BFu32ll)
//============================================================================


struct  I_BFu0c_BFu33  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 I_BFu0c_BFu33) C1{ Fi Fc:0 FL:33}



static void Test_I_BFu0c_BFu33()
{
  {
    init_simple_test("I_BFu0c_BFu33");
    static STRUCT_IF_C I_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu33, I_BFu0c_BFu33)
//============================================================================


struct  I_BFu0c_BFu7c  {
  int v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 I_BFu0c_BFu7c) C1{ Fi Fc:0 Fc:7}



static void Test_I_BFu0c_BFu7c()
{
  {
    init_simple_test("I_BFu0c_BFu7c");
    static STRUCT_IF_C I_BFu0c_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu7c, I_BFu0c_BFu7c)
//============================================================================


struct  I_BFu0c_BFu7i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 I_BFu0c_BFu7i) C1{ Fi Fc:0 Fi:7}



static void Test_I_BFu0c_BFu7i()
{
  {
    init_simple_test("I_BFu0c_BFu7i");
    static STRUCT_IF_C I_BFu0c_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu7i, I_BFu0c_BFu7i)
//============================================================================


struct  I_BFu0c_BFu7ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 I_BFu0c_BFu7ll) C1{ Fi Fc:0 FL:7}



static void Test_I_BFu0c_BFu7ll()
{
  {
    init_simple_test("I_BFu0c_BFu7ll");
    static STRUCT_IF_C I_BFu0c_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu7ll, I_BFu0c_BFu7ll)
//============================================================================


struct  I_BFu0c_BFu7s  {
  int v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 I_BFu0c_BFu7s) C1{ Fi Fc:0 Fs:7}



static void Test_I_BFu0c_BFu7s()
{
  {
    init_simple_test("I_BFu0c_BFu7s");
    static STRUCT_IF_C I_BFu0c_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu7s, I_BFu0c_BFu7s)
//============================================================================


struct  I_BFu0c_BFu8c  {
  int v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 I_BFu0c_BFu8c) C1{ Fi Fc:0 Fc:8}



static void Test_I_BFu0c_BFu8c()
{
  {
    init_simple_test("I_BFu0c_BFu8c");
    static STRUCT_IF_C I_BFu0c_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu8c, I_BFu0c_BFu8c)
//============================================================================


struct  I_BFu0c_BFu8i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 I_BFu0c_BFu8i) C1{ Fi Fc:0 Fi:8}



static void Test_I_BFu0c_BFu8i()
{
  {
    init_simple_test("I_BFu0c_BFu8i");
    static STRUCT_IF_C I_BFu0c_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu8i, I_BFu0c_BFu8i)
//============================================================================


struct  I_BFu0c_BFu8ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 I_BFu0c_BFu8ll) C1{ Fi Fc:0 FL:8}



static void Test_I_BFu0c_BFu8ll()
{
  {
    init_simple_test("I_BFu0c_BFu8ll");
    static STRUCT_IF_C I_BFu0c_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu8ll, I_BFu0c_BFu8ll)
//============================================================================


struct  I_BFu0c_BFu8s  {
  int v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 I_BFu0c_BFu8s) C1{ Fi Fc:0 Fs:8}



static void Test_I_BFu0c_BFu8s()
{
  {
    init_simple_test("I_BFu0c_BFu8s");
    static STRUCT_IF_C I_BFu0c_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu8s, I_BFu0c_BFu8s)
//============================================================================


struct  I_BFu0c_BFu9i  {
  int v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 I_BFu0c_BFu9i) C1{ Fi Fc:0 Fi:9}



static void Test_I_BFu0c_BFu9i()
{
  {
    init_simple_test("I_BFu0c_BFu9i");
    static STRUCT_IF_C I_BFu0c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu9i, I_BFu0c_BFu9i)
//============================================================================


struct  I_BFu0c_BFu9ll  {
  int v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 I_BFu0c_BFu9ll) C1{ Fi Fc:0 FL:9}



static void Test_I_BFu0c_BFu9ll()
{
  {
    init_simple_test("I_BFu0c_BFu9ll");
    static STRUCT_IF_C I_BFu0c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu9ll, I_BFu0c_BFu9ll)
//============================================================================


struct  I_BFu0c_BFu9s  {
  int v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 I_BFu0c_BFu9s) C1{ Fi Fc:0 Fs:9}



static void Test_I_BFu0c_BFu9s()
{
  {
    init_simple_test("I_BFu0c_BFu9s");
    static STRUCT_IF_C I_BFu0c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "I_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_BFu9s, I_BFu0c_BFu9s)
//============================================================================


struct  I_BFu0c_C  {
  int v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 I_BFu0c_C) C1{ Fi Fc:0 Fc}



static void Test_I_BFu0c_C()
{
  {
    init_simple_test("I_BFu0c_C");
    static STRUCT_IF_C I_BFu0c_C lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_C)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_C)");
    check_field_offset(lv, v1, 0, "I_BFu0c_C.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_C, I_BFu0c_C)
//============================================================================


struct  I_BFu0c_D  {
  int v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 I_BFu0c_D) C1{ Fi Fc:0 FL}



static void Test_I_BFu0c_D()
{
  {
    init_simple_test("I_BFu0c_D");
    static STRUCT_IF_C I_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_D)");
    check_field_offset(lv, v1, 0, "I_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_D, I_BFu0c_D)
//============================================================================


struct  I_BFu0c_F  {
  int v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 I_BFu0c_F) C1{ Fi Fc:0 Fi}



static void Test_I_BFu0c_F()
{
  {
    init_simple_test("I_BFu0c_F");
    static STRUCT_IF_C I_BFu0c_F lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_F)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_F)");
    check_field_offset(lv, v1, 0, "I_BFu0c_F.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_F, I_BFu0c_F)
//============================================================================


struct  I_BFu0c_I  {
  int v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 I_BFu0c_I) C1{ Fi Fc:0 Fi}



static void Test_I_BFu0c_I()
{
  {
    init_simple_test("I_BFu0c_I");
    static STRUCT_IF_C I_BFu0c_I lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_I)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_I)");
    check_field_offset(lv, v1, 0, "I_BFu0c_I.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_I, I_BFu0c_I)
//============================================================================


struct  I_BFu0c_Ip  {
  int v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 I_BFu0c_Ip) C1{ Fi Fc:0 Fp}



static void Test_I_BFu0c_Ip()
{
  {
    init_simple_test("I_BFu0c_Ip");
    static STRUCT_IF_C I_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "I_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_Ip, I_BFu0c_Ip)
//============================================================================


struct  I_BFu0c_L  {
  int v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 I_BFu0c_L) C1{ Fi Fc:0 FL}



static void Test_I_BFu0c_L()
{
  {
    init_simple_test("I_BFu0c_L");
    static STRUCT_IF_C I_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_L)");
    check_field_offset(lv, v1, 0, "I_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_L, I_BFu0c_L)
//============================================================================


struct  I_BFu0c_S  {
  int v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 I_BFu0c_S) C1{ Fi Fc:0 Fs}



static void Test_I_BFu0c_S()
{
  {
    init_simple_test("I_BFu0c_S");
    static STRUCT_IF_C I_BFu0c_S lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_S)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_S)");
    check_field_offset(lv, v1, 0, "I_BFu0c_S.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_S, I_BFu0c_S)
//============================================================================


struct  I_BFu0c_Uc  {
  int v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 I_BFu0c_Uc) C1{ Fi Fc:0 Fc}



static void Test_I_BFu0c_Uc()
{
  {
    init_simple_test("I_BFu0c_Uc");
    static STRUCT_IF_C I_BFu0c_Uc lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "I_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_Uc, I_BFu0c_Uc)
//============================================================================


struct  I_BFu0c_Ui  {
  int v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 I_BFu0c_Ui) C1{ Fi Fc:0 Fi}



static void Test_I_BFu0c_Ui()
{
  {
    init_simple_test("I_BFu0c_Ui");
    static STRUCT_IF_C I_BFu0c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "I_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_Ui, I_BFu0c_Ui)
//============================================================================


struct  I_BFu0c_Ul  {
  int v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 I_BFu0c_Ul) C1{ Fi Fc:0 FL}



static void Test_I_BFu0c_Ul()
{
  {
    init_simple_test("I_BFu0c_Ul");
    static STRUCT_IF_C I_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "I_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_Ul, I_BFu0c_Ul)
//============================================================================


struct  I_BFu0c_Us  {
  int v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 I_BFu0c_Us) C1{ Fi Fc:0 Fs}



static void Test_I_BFu0c_Us()
{
  {
    init_simple_test("I_BFu0c_Us");
    static STRUCT_IF_C I_BFu0c_Us lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "I_BFu0c_Us.v1");
    check_field_offset(lv, v2, 4, "I_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_Us, I_BFu0c_Us)
//============================================================================


struct  I_BFu0c_Vp  {
  int v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 I_BFu0c_Vp) C1{ Fi Fc:0 Fp}



static void Test_I_BFu0c_Vp()
{
  {
    init_simple_test("I_BFu0c_Vp");
    static STRUCT_IF_C I_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "I_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0c_Vp, I_BFu0c_Vp)
//============================================================================


struct  I_BFu0i  {
  int v1;
  unsigned int  :0;
};
//SIG(1 I_BFu0i) C1{ Fi Fi:0}



static void Test_I_BFu0i()
{
  {
    init_simple_test("I_BFu0i");
    static STRUCT_IF_C I_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i, I_BFu0i)
//============================================================================


struct  I_BFu0i_BFu0c  {
  int v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 I_BFu0i_BFu0c) C1{ Fi Fi:0 Fc:0}



static void Test_I_BFu0i_BFu0c()
{
  {
    init_simple_test("I_BFu0i_BFu0c");
    static STRUCT_IF_C I_BFu0i_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu0c, I_BFu0i_BFu0c)
//============================================================================


struct  I_BFu0i_BFu0i  {
  int v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 I_BFu0i_BFu0i) C1{ Fi Fi:0 Fi:0}



static void Test_I_BFu0i_BFu0i()
{
  {
    init_simple_test("I_BFu0i_BFu0i");
    static STRUCT_IF_C I_BFu0i_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu0i, I_BFu0i_BFu0i)
//============================================================================


struct  I_BFu0i_BFu0ll  {
  int v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 I_BFu0i_BFu0ll) C1{ Fi Fi:0 FL:0}



static void Test_I_BFu0i_BFu0ll()
{
  {
    init_simple_test("I_BFu0i_BFu0ll");
    static STRUCT_IF_C I_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu0ll, I_BFu0i_BFu0ll)
//============================================================================


struct  I_BFu0i_BFu0s  {
  int v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 I_BFu0i_BFu0s) C1{ Fi Fi:0 Fs:0}



static void Test_I_BFu0i_BFu0s()
{
  {
    init_simple_test("I_BFu0i_BFu0s");
    static STRUCT_IF_C I_BFu0i_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu0s, I_BFu0i_BFu0s)
//============================================================================


struct  I_BFu0i_BFu15i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 I_BFu0i_BFu15i) C1{ Fi Fi:0 Fi:15}



static void Test_I_BFu0i_BFu15i()
{
  {
    init_simple_test("I_BFu0i_BFu15i");
    static STRUCT_IF_C I_BFu0i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu15i, I_BFu0i_BFu15i)
//============================================================================


struct  I_BFu0i_BFu15ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 I_BFu0i_BFu15ll) C1{ Fi Fi:0 FL:15}



static void Test_I_BFu0i_BFu15ll()
{
  {
    init_simple_test("I_BFu0i_BFu15ll");
    static STRUCT_IF_C I_BFu0i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu15ll, I_BFu0i_BFu15ll)
//============================================================================


struct  I_BFu0i_BFu15s  {
  int v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 I_BFu0i_BFu15s) C1{ Fi Fi:0 Fs:15}



static void Test_I_BFu0i_BFu15s()
{
  {
    init_simple_test("I_BFu0i_BFu15s");
    static STRUCT_IF_C I_BFu0i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu15s, I_BFu0i_BFu15s)
//============================================================================


struct  I_BFu0i_BFu16i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 I_BFu0i_BFu16i) C1{ Fi Fi:0 Fi:16}



static void Test_I_BFu0i_BFu16i()
{
  {
    init_simple_test("I_BFu0i_BFu16i");
    static STRUCT_IF_C I_BFu0i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu16i, I_BFu0i_BFu16i)
//============================================================================


struct  I_BFu0i_BFu16ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 I_BFu0i_BFu16ll) C1{ Fi Fi:0 FL:16}



static void Test_I_BFu0i_BFu16ll()
{
  {
    init_simple_test("I_BFu0i_BFu16ll");
    static STRUCT_IF_C I_BFu0i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu16ll, I_BFu0i_BFu16ll)
//============================================================================


struct  I_BFu0i_BFu16s  {
  int v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 I_BFu0i_BFu16s) C1{ Fi Fi:0 Fs:16}



static void Test_I_BFu0i_BFu16s()
{
  {
    init_simple_test("I_BFu0i_BFu16s");
    static STRUCT_IF_C I_BFu0i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu16s, I_BFu0i_BFu16s)
//============================================================================


struct  I_BFu0i_BFu17i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 I_BFu0i_BFu17i) C1{ Fi Fi:0 Fi:17}



static void Test_I_BFu0i_BFu17i()
{
  {
    init_simple_test("I_BFu0i_BFu17i");
    static STRUCT_IF_C I_BFu0i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu17i, I_BFu0i_BFu17i)
//============================================================================


struct  I_BFu0i_BFu17ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 I_BFu0i_BFu17ll) C1{ Fi Fi:0 FL:17}



static void Test_I_BFu0i_BFu17ll()
{
  {
    init_simple_test("I_BFu0i_BFu17ll");
    static STRUCT_IF_C I_BFu0i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu17ll, I_BFu0i_BFu17ll)
//============================================================================


struct  I_BFu0i_BFu1c  {
  int v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 I_BFu0i_BFu1c) C1{ Fi Fi:0 Fc:1}



static void Test_I_BFu0i_BFu1c()
{
  {
    init_simple_test("I_BFu0i_BFu1c");
    static STRUCT_IF_C I_BFu0i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu1c, I_BFu0i_BFu1c)
//============================================================================


struct  I_BFu0i_BFu1i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 I_BFu0i_BFu1i) C1{ Fi Fi:0 Fi:1}



static void Test_I_BFu0i_BFu1i()
{
  {
    init_simple_test("I_BFu0i_BFu1i");
    static STRUCT_IF_C I_BFu0i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu1i, I_BFu0i_BFu1i)
//============================================================================


struct  I_BFu0i_BFu1ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 I_BFu0i_BFu1ll) C1{ Fi Fi:0 FL:1}



static void Test_I_BFu0i_BFu1ll()
{
  {
    init_simple_test("I_BFu0i_BFu1ll");
    static STRUCT_IF_C I_BFu0i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu1ll, I_BFu0i_BFu1ll)
//============================================================================


struct  I_BFu0i_BFu1s  {
  int v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 I_BFu0i_BFu1s) C1{ Fi Fi:0 Fs:1}



static void Test_I_BFu0i_BFu1s()
{
  {
    init_simple_test("I_BFu0i_BFu1s");
    static STRUCT_IF_C I_BFu0i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu1s, I_BFu0i_BFu1s)
//============================================================================


struct  I_BFu0i_BFu31i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 I_BFu0i_BFu31i) C1{ Fi Fi:0 Fi:31}



static void Test_I_BFu0i_BFu31i()
{
  {
    init_simple_test("I_BFu0i_BFu31i");
    static STRUCT_IF_C I_BFu0i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu31i, I_BFu0i_BFu31i)
//============================================================================


struct  I_BFu0i_BFu31ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 I_BFu0i_BFu31ll) C1{ Fi Fi:0 FL:31}



static void Test_I_BFu0i_BFu31ll()
{
  {
    init_simple_test("I_BFu0i_BFu31ll");
    static STRUCT_IF_C I_BFu0i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu31ll, I_BFu0i_BFu31ll)
//============================================================================


struct  I_BFu0i_BFu32i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 I_BFu0i_BFu32i) C1{ Fi Fi:0 Fi:32}



static void Test_I_BFu0i_BFu32i()
{
  {
    init_simple_test("I_BFu0i_BFu32i");
    static STRUCT_IF_C I_BFu0i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu32i, I_BFu0i_BFu32i)
//============================================================================


struct  I_BFu0i_BFu32ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 I_BFu0i_BFu32ll) C1{ Fi Fi:0 FL:32}



static void Test_I_BFu0i_BFu32ll()
{
  {
    init_simple_test("I_BFu0i_BFu32ll");
    static STRUCT_IF_C I_BFu0i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu32ll, I_BFu0i_BFu32ll)
//============================================================================


struct  I_BFu0i_BFu33  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 I_BFu0i_BFu33) C1{ Fi Fi:0 FL:33}



static void Test_I_BFu0i_BFu33()
{
  {
    init_simple_test("I_BFu0i_BFu33");
    static STRUCT_IF_C I_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu33, I_BFu0i_BFu33)
//============================================================================


struct  I_BFu0i_BFu7c  {
  int v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 I_BFu0i_BFu7c) C1{ Fi Fi:0 Fc:7}



static void Test_I_BFu0i_BFu7c()
{
  {
    init_simple_test("I_BFu0i_BFu7c");
    static STRUCT_IF_C I_BFu0i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu7c, I_BFu0i_BFu7c)
//============================================================================


struct  I_BFu0i_BFu7i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 I_BFu0i_BFu7i) C1{ Fi Fi:0 Fi:7}



static void Test_I_BFu0i_BFu7i()
{
  {
    init_simple_test("I_BFu0i_BFu7i");
    static STRUCT_IF_C I_BFu0i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu7i, I_BFu0i_BFu7i)
//============================================================================


struct  I_BFu0i_BFu7ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 I_BFu0i_BFu7ll) C1{ Fi Fi:0 FL:7}



static void Test_I_BFu0i_BFu7ll()
{
  {
    init_simple_test("I_BFu0i_BFu7ll");
    static STRUCT_IF_C I_BFu0i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu7ll, I_BFu0i_BFu7ll)
//============================================================================


struct  I_BFu0i_BFu7s  {
  int v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 I_BFu0i_BFu7s) C1{ Fi Fi:0 Fs:7}



static void Test_I_BFu0i_BFu7s()
{
  {
    init_simple_test("I_BFu0i_BFu7s");
    static STRUCT_IF_C I_BFu0i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu7s, I_BFu0i_BFu7s)
//============================================================================


struct  I_BFu0i_BFu8c  {
  int v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 I_BFu0i_BFu8c) C1{ Fi Fi:0 Fc:8}



static void Test_I_BFu0i_BFu8c()
{
  {
    init_simple_test("I_BFu0i_BFu8c");
    static STRUCT_IF_C I_BFu0i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu8c, I_BFu0i_BFu8c)
//============================================================================


struct  I_BFu0i_BFu8i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 I_BFu0i_BFu8i) C1{ Fi Fi:0 Fi:8}



static void Test_I_BFu0i_BFu8i()
{
  {
    init_simple_test("I_BFu0i_BFu8i");
    static STRUCT_IF_C I_BFu0i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu8i, I_BFu0i_BFu8i)
//============================================================================


struct  I_BFu0i_BFu8ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 I_BFu0i_BFu8ll) C1{ Fi Fi:0 FL:8}



static void Test_I_BFu0i_BFu8ll()
{
  {
    init_simple_test("I_BFu0i_BFu8ll");
    static STRUCT_IF_C I_BFu0i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu8ll, I_BFu0i_BFu8ll)
//============================================================================


struct  I_BFu0i_BFu8s  {
  int v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 I_BFu0i_BFu8s) C1{ Fi Fi:0 Fs:8}



static void Test_I_BFu0i_BFu8s()
{
  {
    init_simple_test("I_BFu0i_BFu8s");
    static STRUCT_IF_C I_BFu0i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu8s, I_BFu0i_BFu8s)
//============================================================================


struct  I_BFu0i_BFu9i  {
  int v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 I_BFu0i_BFu9i) C1{ Fi Fi:0 Fi:9}



static void Test_I_BFu0i_BFu9i()
{
  {
    init_simple_test("I_BFu0i_BFu9i");
    static STRUCT_IF_C I_BFu0i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu9i, I_BFu0i_BFu9i)
//============================================================================


struct  I_BFu0i_BFu9ll  {
  int v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 I_BFu0i_BFu9ll) C1{ Fi Fi:0 FL:9}



static void Test_I_BFu0i_BFu9ll()
{
  {
    init_simple_test("I_BFu0i_BFu9ll");
    static STRUCT_IF_C I_BFu0i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu9ll, I_BFu0i_BFu9ll)
//============================================================================


struct  I_BFu0i_BFu9s  {
  int v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 I_BFu0i_BFu9s) C1{ Fi Fi:0 Fs:9}



static void Test_I_BFu0i_BFu9s()
{
  {
    init_simple_test("I_BFu0i_BFu9s");
    static STRUCT_IF_C I_BFu0i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "I_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_BFu9s, I_BFu0i_BFu9s)
//============================================================================


struct  I_BFu0i_C  {
  int v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 I_BFu0i_C) C1{ Fi Fi:0 Fc}



static void Test_I_BFu0i_C()
{
  {
    init_simple_test("I_BFu0i_C");
    static STRUCT_IF_C I_BFu0i_C lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_C)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_C)");
    check_field_offset(lv, v1, 0, "I_BFu0i_C.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_C, I_BFu0i_C)
//============================================================================


struct  I_BFu0i_D  {
  int v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 I_BFu0i_D) C1{ Fi Fi:0 FL}



static void Test_I_BFu0i_D()
{
  {
    init_simple_test("I_BFu0i_D");
    static STRUCT_IF_C I_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_D)");
    check_field_offset(lv, v1, 0, "I_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_D, I_BFu0i_D)
//============================================================================


struct  I_BFu0i_F  {
  int v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 I_BFu0i_F) C1{ Fi Fi:0 Fi}



static void Test_I_BFu0i_F()
{
  {
    init_simple_test("I_BFu0i_F");
    static STRUCT_IF_C I_BFu0i_F lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_F)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_F)");
    check_field_offset(lv, v1, 0, "I_BFu0i_F.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_F, I_BFu0i_F)
//============================================================================


struct  I_BFu0i_I  {
  int v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 I_BFu0i_I) C1{ Fi Fi:0 Fi}



static void Test_I_BFu0i_I()
{
  {
    init_simple_test("I_BFu0i_I");
    static STRUCT_IF_C I_BFu0i_I lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_I)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_I)");
    check_field_offset(lv, v1, 0, "I_BFu0i_I.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_I, I_BFu0i_I)
//============================================================================


struct  I_BFu0i_Ip  {
  int v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 I_BFu0i_Ip) C1{ Fi Fi:0 Fp}



static void Test_I_BFu0i_Ip()
{
  {
    init_simple_test("I_BFu0i_Ip");
    static STRUCT_IF_C I_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "I_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_Ip, I_BFu0i_Ip)
//============================================================================


struct  I_BFu0i_L  {
  int v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 I_BFu0i_L) C1{ Fi Fi:0 FL}



static void Test_I_BFu0i_L()
{
  {
    init_simple_test("I_BFu0i_L");
    static STRUCT_IF_C I_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_L)");
    check_field_offset(lv, v1, 0, "I_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_L, I_BFu0i_L)
//============================================================================


struct  I_BFu0i_S  {
  int v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 I_BFu0i_S) C1{ Fi Fi:0 Fs}



static void Test_I_BFu0i_S()
{
  {
    init_simple_test("I_BFu0i_S");
    static STRUCT_IF_C I_BFu0i_S lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_S)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_S)");
    check_field_offset(lv, v1, 0, "I_BFu0i_S.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_S, I_BFu0i_S)
//============================================================================


struct  I_BFu0i_Uc  {
  int v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 I_BFu0i_Uc) C1{ Fi Fi:0 Fc}



static void Test_I_BFu0i_Uc()
{
  {
    init_simple_test("I_BFu0i_Uc");
    static STRUCT_IF_C I_BFu0i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "I_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_Uc, I_BFu0i_Uc)
//============================================================================


struct  I_BFu0i_Ui  {
  int v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 I_BFu0i_Ui) C1{ Fi Fi:0 Fi}



static void Test_I_BFu0i_Ui()
{
  {
    init_simple_test("I_BFu0i_Ui");
    static STRUCT_IF_C I_BFu0i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "I_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_Ui, I_BFu0i_Ui)
//============================================================================


struct  I_BFu0i_Ul  {
  int v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 I_BFu0i_Ul) C1{ Fi Fi:0 FL}



static void Test_I_BFu0i_Ul()
{
  {
    init_simple_test("I_BFu0i_Ul");
    static STRUCT_IF_C I_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "I_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_Ul, I_BFu0i_Ul)
//============================================================================


struct  I_BFu0i_Us  {
  int v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 I_BFu0i_Us) C1{ Fi Fi:0 Fs}



static void Test_I_BFu0i_Us()
{
  {
    init_simple_test("I_BFu0i_Us");
    static STRUCT_IF_C I_BFu0i_Us lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "I_BFu0i_Us.v1");
    check_field_offset(lv, v2, 4, "I_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_Us, I_BFu0i_Us)
//============================================================================


struct  I_BFu0i_Vp  {
  int v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 I_BFu0i_Vp) C1{ Fi Fi:0 Fp}



static void Test_I_BFu0i_Vp()
{
  {
    init_simple_test("I_BFu0i_Vp");
    static STRUCT_IF_C I_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "I_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0i_Vp, I_BFu0i_Vp)
//============================================================================


struct  I_BFu0ll  {
  int v1;
  __tsu64  :0;
};
//SIG(1 I_BFu0ll) C1{ Fi FL:0}



static void Test_I_BFu0ll()
{
  {
    init_simple_test("I_BFu0ll");
    static STRUCT_IF_C I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll, I_BFu0ll)
//============================================================================


struct  I_BFu0ll_BFu0c  {
  int v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 I_BFu0ll_BFu0c) C1{ Fi FL:0 Fc:0}



static void Test_I_BFu0ll_BFu0c()
{
  {
    init_simple_test("I_BFu0ll_BFu0c");
    static STRUCT_IF_C I_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu0c, I_BFu0ll_BFu0c)
//============================================================================


struct  I_BFu0ll_BFu0i  {
  int v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 I_BFu0ll_BFu0i) C1{ Fi FL:0 Fi:0}



static void Test_I_BFu0ll_BFu0i()
{
  {
    init_simple_test("I_BFu0ll_BFu0i");
    static STRUCT_IF_C I_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu0i, I_BFu0ll_BFu0i)
//============================================================================


struct  I_BFu0ll_BFu0ll  {
  int v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 I_BFu0ll_BFu0ll) C1{ Fi FL:0 FL:0}



static void Test_I_BFu0ll_BFu0ll()
{
  {
    init_simple_test("I_BFu0ll_BFu0ll");
    static STRUCT_IF_C I_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu0ll, I_BFu0ll_BFu0ll)
//============================================================================


struct  I_BFu0ll_BFu0s  {
  int v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 I_BFu0ll_BFu0s) C1{ Fi FL:0 Fs:0}



static void Test_I_BFu0ll_BFu0s()
{
  {
    init_simple_test("I_BFu0ll_BFu0s");
    static STRUCT_IF_C I_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu0s, I_BFu0ll_BFu0s)
//============================================================================


struct  I_BFu0ll_BFu15i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 I_BFu0ll_BFu15i) C1{ Fi FL:0 Fi:15}



static void Test_I_BFu0ll_BFu15i()
{
  {
    init_simple_test("I_BFu0ll_BFu15i");
    static STRUCT_IF_C I_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "I_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "I_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu15i, I_BFu0ll_BFu15i)
//============================================================================


struct  I_BFu0ll_BFu15ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 I_BFu0ll_BFu15ll) C1{ Fi FL:0 FL:15}



static void Test_I_BFu0ll_BFu15ll()
{
  {
    init_simple_test("I_BFu0ll_BFu15ll");
    static STRUCT_IF_C I_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "I_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "I_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu15ll, I_BFu0ll_BFu15ll)
//============================================================================


struct  I_BFu0ll_BFu15s  {
  int v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 I_BFu0ll_BFu15s) C1{ Fi FL:0 Fs:15}



static void Test_I_BFu0ll_BFu15s()
{
  {
    init_simple_test("I_BFu0ll_BFu15s");
    static STRUCT_IF_C I_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "I_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "I_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu15s, I_BFu0ll_BFu15s)
//============================================================================


struct  I_BFu0ll_BFu16i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 I_BFu0ll_BFu16i) C1{ Fi FL:0 Fi:16}



static void Test_I_BFu0ll_BFu16i()
{
  {
    init_simple_test("I_BFu0ll_BFu16i");
    static STRUCT_IF_C I_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "I_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "I_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu16i, I_BFu0ll_BFu16i)
//============================================================================


struct  I_BFu0ll_BFu16ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 I_BFu0ll_BFu16ll) C1{ Fi FL:0 FL:16}



static void Test_I_BFu0ll_BFu16ll()
{
  {
    init_simple_test("I_BFu0ll_BFu16ll");
    static STRUCT_IF_C I_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "I_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "I_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu16ll, I_BFu0ll_BFu16ll)
//============================================================================


struct  I_BFu0ll_BFu16s  {
  int v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 I_BFu0ll_BFu16s) C1{ Fi FL:0 Fs:16}



static void Test_I_BFu0ll_BFu16s()
{
  {
    init_simple_test("I_BFu0ll_BFu16s");
    static STRUCT_IF_C I_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "I_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "I_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu16s, I_BFu0ll_BFu16s)
//============================================================================


struct  I_BFu0ll_BFu17i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 I_BFu0ll_BFu17i) C1{ Fi FL:0 Fi:17}



static void Test_I_BFu0ll_BFu17i()
{
  {
    init_simple_test("I_BFu0ll_BFu17i");
    static STRUCT_IF_C I_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "I_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "I_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu17i, I_BFu0ll_BFu17i)
//============================================================================


struct  I_BFu0ll_BFu17ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 I_BFu0ll_BFu17ll) C1{ Fi FL:0 FL:17}



static void Test_I_BFu0ll_BFu17ll()
{
  {
    init_simple_test("I_BFu0ll_BFu17ll");
    static STRUCT_IF_C I_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "I_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "I_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu17ll, I_BFu0ll_BFu17ll)
//============================================================================


struct  I_BFu0ll_BFu1c  {
  int v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 I_BFu0ll_BFu1c) C1{ Fi FL:0 Fc:1}



static void Test_I_BFu0ll_BFu1c()
{
  {
    init_simple_test("I_BFu0ll_BFu1c");
    static STRUCT_IF_C I_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "I_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu1c, I_BFu0ll_BFu1c)
//============================================================================


struct  I_BFu0ll_BFu1i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 I_BFu0ll_BFu1i) C1{ Fi FL:0 Fi:1}



static void Test_I_BFu0ll_BFu1i()
{
  {
    init_simple_test("I_BFu0ll_BFu1i");
    static STRUCT_IF_C I_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "I_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu1i, I_BFu0ll_BFu1i)
//============================================================================


struct  I_BFu0ll_BFu1ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 I_BFu0ll_BFu1ll) C1{ Fi FL:0 FL:1}



static void Test_I_BFu0ll_BFu1ll()
{
  {
    init_simple_test("I_BFu0ll_BFu1ll");
    static STRUCT_IF_C I_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "I_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu1ll, I_BFu0ll_BFu1ll)
//============================================================================


struct  I_BFu0ll_BFu1s  {
  int v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 I_BFu0ll_BFu1s) C1{ Fi FL:0 Fs:1}



static void Test_I_BFu0ll_BFu1s()
{
  {
    init_simple_test("I_BFu0ll_BFu1s");
    static STRUCT_IF_C I_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "I_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu1s, I_BFu0ll_BFu1s)
//============================================================================


struct  I_BFu0ll_BFu31i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 I_BFu0ll_BFu31i) C1{ Fi FL:0 Fi:31}



static void Test_I_BFu0ll_BFu31i()
{
  {
    init_simple_test("I_BFu0ll_BFu31i");
    static STRUCT_IF_C I_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "I_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "I_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu31i, I_BFu0ll_BFu31i)
//============================================================================


struct  I_BFu0ll_BFu31ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 I_BFu0ll_BFu31ll) C1{ Fi FL:0 FL:31}



static void Test_I_BFu0ll_BFu31ll()
{
  {
    init_simple_test("I_BFu0ll_BFu31ll");
    static STRUCT_IF_C I_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "I_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "I_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu31ll, I_BFu0ll_BFu31ll)
//============================================================================


struct  I_BFu0ll_BFu32i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 I_BFu0ll_BFu32i) C1{ Fi FL:0 Fi:32}



static void Test_I_BFu0ll_BFu32i()
{
  {
    init_simple_test("I_BFu0ll_BFu32i");
    static STRUCT_IF_C I_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "I_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "I_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu32i, I_BFu0ll_BFu32i)
//============================================================================


struct  I_BFu0ll_BFu32ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 I_BFu0ll_BFu32ll) C1{ Fi FL:0 FL:32}



static void Test_I_BFu0ll_BFu32ll()
{
  {
    init_simple_test("I_BFu0ll_BFu32ll");
    static STRUCT_IF_C I_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "I_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "I_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu32ll, I_BFu0ll_BFu32ll)
//============================================================================


struct  I_BFu0ll_BFu33  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 I_BFu0ll_BFu33) C1{ Fi FL:0 FL:33}



static void Test_I_BFu0ll_BFu33()
{
  {
    init_simple_test("I_BFu0ll_BFu33");
    static STRUCT_IF_C I_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu33, I_BFu0ll_BFu33)
//============================================================================


struct  I_BFu0ll_BFu7c  {
  int v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 I_BFu0ll_BFu7c) C1{ Fi FL:0 Fc:7}



static void Test_I_BFu0ll_BFu7c()
{
  {
    init_simple_test("I_BFu0ll_BFu7c");
    static STRUCT_IF_C I_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "I_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "I_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu7c, I_BFu0ll_BFu7c)
//============================================================================


struct  I_BFu0ll_BFu7i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 I_BFu0ll_BFu7i) C1{ Fi FL:0 Fi:7}



static void Test_I_BFu0ll_BFu7i()
{
  {
    init_simple_test("I_BFu0ll_BFu7i");
    static STRUCT_IF_C I_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "I_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "I_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu7i, I_BFu0ll_BFu7i)
//============================================================================


struct  I_BFu0ll_BFu7ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 I_BFu0ll_BFu7ll) C1{ Fi FL:0 FL:7}



static void Test_I_BFu0ll_BFu7ll()
{
  {
    init_simple_test("I_BFu0ll_BFu7ll");
    static STRUCT_IF_C I_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "I_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "I_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu7ll, I_BFu0ll_BFu7ll)
//============================================================================


struct  I_BFu0ll_BFu7s  {
  int v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 I_BFu0ll_BFu7s) C1{ Fi FL:0 Fs:7}



static void Test_I_BFu0ll_BFu7s()
{
  {
    init_simple_test("I_BFu0ll_BFu7s");
    static STRUCT_IF_C I_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "I_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "I_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu7s, I_BFu0ll_BFu7s)
//============================================================================


struct  I_BFu0ll_BFu8c  {
  int v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 I_BFu0ll_BFu8c) C1{ Fi FL:0 Fc:8}



static void Test_I_BFu0ll_BFu8c()
{
  {
    init_simple_test("I_BFu0ll_BFu8c");
    static STRUCT_IF_C I_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "I_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "I_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu8c, I_BFu0ll_BFu8c)
//============================================================================


struct  I_BFu0ll_BFu8i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 I_BFu0ll_BFu8i) C1{ Fi FL:0 Fi:8}



static void Test_I_BFu0ll_BFu8i()
{
  {
    init_simple_test("I_BFu0ll_BFu8i");
    static STRUCT_IF_C I_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "I_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "I_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu8i, I_BFu0ll_BFu8i)
//============================================================================


struct  I_BFu0ll_BFu8ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 I_BFu0ll_BFu8ll) C1{ Fi FL:0 FL:8}



static void Test_I_BFu0ll_BFu8ll()
{
  {
    init_simple_test("I_BFu0ll_BFu8ll");
    static STRUCT_IF_C I_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "I_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "I_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu8ll, I_BFu0ll_BFu8ll)
//============================================================================


struct  I_BFu0ll_BFu8s  {
  int v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 I_BFu0ll_BFu8s) C1{ Fi FL:0 Fs:8}



static void Test_I_BFu0ll_BFu8s()
{
  {
    init_simple_test("I_BFu0ll_BFu8s");
    static STRUCT_IF_C I_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "I_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "I_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu8s, I_BFu0ll_BFu8s)
//============================================================================


struct  I_BFu0ll_BFu9i  {
  int v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 I_BFu0ll_BFu9i) C1{ Fi FL:0 Fi:9}



static void Test_I_BFu0ll_BFu9i()
{
  {
    init_simple_test("I_BFu0ll_BFu9i");
    static STRUCT_IF_C I_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "I_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "I_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu9i, I_BFu0ll_BFu9i)
//============================================================================


struct  I_BFu0ll_BFu9ll  {
  int v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 I_BFu0ll_BFu9ll) C1{ Fi FL:0 FL:9}



static void Test_I_BFu0ll_BFu9ll()
{
  {
    init_simple_test("I_BFu0ll_BFu9ll");
    static STRUCT_IF_C I_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "I_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "I_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu9ll, I_BFu0ll_BFu9ll)
//============================================================================


struct  I_BFu0ll_BFu9s  {
  int v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 I_BFu0ll_BFu9s) C1{ Fi FL:0 Fs:9}



static void Test_I_BFu0ll_BFu9s()
{
  {
    init_simple_test("I_BFu0ll_BFu9s");
    static STRUCT_IF_C I_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "I_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "I_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_BFu9s, I_BFu0ll_BFu9s)
//============================================================================


struct  I_BFu0ll_C  {
  int v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 I_BFu0ll_C) C1{ Fi FL:0 Fc}



static void Test_I_BFu0ll_C()
{
  {
    init_simple_test("I_BFu0ll_C");
    static STRUCT_IF_C I_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_C, I_BFu0ll_C)
//============================================================================


struct  I_BFu0ll_D  {
  int v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 I_BFu0ll_D) C1{ Fi FL:0 FL}



static void Test_I_BFu0ll_D()
{
  {
    init_simple_test("I_BFu0ll_D");
    static STRUCT_IF_C I_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_D, I_BFu0ll_D)
//============================================================================


struct  I_BFu0ll_F  {
  int v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 I_BFu0ll_F) C1{ Fi FL:0 Fi}



static void Test_I_BFu0ll_F()
{
  {
    init_simple_test("I_BFu0ll_F");
    static STRUCT_IF_C I_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_F, I_BFu0ll_F)
//============================================================================


struct  I_BFu0ll_I  {
  int v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 I_BFu0ll_I) C1{ Fi FL:0 Fi}



static void Test_I_BFu0ll_I()
{
  {
    init_simple_test("I_BFu0ll_I");
    static STRUCT_IF_C I_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_I, I_BFu0ll_I)
//============================================================================


struct  I_BFu0ll_Ip  {
  int v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 I_BFu0ll_Ip) C1{ Fi FL:0 Fp}



static void Test_I_BFu0ll_Ip()
{
  {
    init_simple_test("I_BFu0ll_Ip");
    static STRUCT_IF_C I_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_Ip, I_BFu0ll_Ip)
//============================================================================


struct  I_BFu0ll_L  {
  int v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 I_BFu0ll_L) C1{ Fi FL:0 FL}



static void Test_I_BFu0ll_L()
{
  {
    init_simple_test("I_BFu0ll_L");
    static STRUCT_IF_C I_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_L, I_BFu0ll_L)
//============================================================================


struct  I_BFu0ll_S  {
  int v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 I_BFu0ll_S) C1{ Fi FL:0 Fs}



static void Test_I_BFu0ll_S()
{
  {
    init_simple_test("I_BFu0ll_S");
    static STRUCT_IF_C I_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_S, I_BFu0ll_S)
//============================================================================


struct  I_BFu0ll_Uc  {
  int v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 I_BFu0ll_Uc) C1{ Fi FL:0 Fc}



static void Test_I_BFu0ll_Uc()
{
  {
    init_simple_test("I_BFu0ll_Uc");
    static STRUCT_IF_C I_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_Uc, I_BFu0ll_Uc)
//============================================================================


struct  I_BFu0ll_Ui  {
  int v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 I_BFu0ll_Ui) C1{ Fi FL:0 Fi}



static void Test_I_BFu0ll_Ui()
{
  {
    init_simple_test("I_BFu0ll_Ui");
    static STRUCT_IF_C I_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_Ui, I_BFu0ll_Ui)
//============================================================================


struct  I_BFu0ll_Ul  {
  int v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 I_BFu0ll_Ul) C1{ Fi FL:0 FL}



static void Test_I_BFu0ll_Ul()
{
  {
    init_simple_test("I_BFu0ll_Ul");
    static STRUCT_IF_C I_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_Ul, I_BFu0ll_Ul)
//============================================================================


struct  I_BFu0ll_Us  {
  int v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 I_BFu0ll_Us) C1{ Fi FL:0 Fs}



static void Test_I_BFu0ll_Us()
{
  {
    init_simple_test("I_BFu0ll_Us");
    static STRUCT_IF_C I_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(12,8), "sizeof(I_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_Us, I_BFu0ll_Us)
//============================================================================


struct  I_BFu0ll_Vp  {
  int v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 I_BFu0ll_Vp) C1{ Fi FL:0 Fp}



static void Test_I_BFu0ll_Vp()
{
  {
    init_simple_test("I_BFu0ll_Vp");
    static STRUCT_IF_C I_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "I_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0ll_Vp, I_BFu0ll_Vp)
//============================================================================


struct  I_BFu0s  {
  int v1;
  unsigned short  :0;
};
//SIG(1 I_BFu0s) C1{ Fi Fs:0}



static void Test_I_BFu0s()
{
  {
    init_simple_test("I_BFu0s");
    static STRUCT_IF_C I_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s, I_BFu0s)
//============================================================================


struct  I_BFu0s_BFu0c  {
  int v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 I_BFu0s_BFu0c) C1{ Fi Fs:0 Fc:0}



static void Test_I_BFu0s_BFu0c()
{
  {
    init_simple_test("I_BFu0s_BFu0c");
    static STRUCT_IF_C I_BFu0s_BFu0c lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu0c, I_BFu0s_BFu0c)
//============================================================================


struct  I_BFu0s_BFu0i  {
  int v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 I_BFu0s_BFu0i) C1{ Fi Fs:0 Fi:0}



static void Test_I_BFu0s_BFu0i()
{
  {
    init_simple_test("I_BFu0s_BFu0i");
    static STRUCT_IF_C I_BFu0s_BFu0i lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu0i, I_BFu0s_BFu0i)
//============================================================================


struct  I_BFu0s_BFu0ll  {
  int v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 I_BFu0s_BFu0ll) C1{ Fi Fs:0 FL:0}



static void Test_I_BFu0s_BFu0ll()
{
  {
    init_simple_test("I_BFu0s_BFu0ll");
    static STRUCT_IF_C I_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(I_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu0ll, I_BFu0s_BFu0ll)
//============================================================================


struct  I_BFu0s_BFu0s  {
  int v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 I_BFu0s_BFu0s) C1{ Fi Fs:0 Fs:0}



static void Test_I_BFu0s_BFu0s()
{
  {
    init_simple_test("I_BFu0s_BFu0s");
    static STRUCT_IF_C I_BFu0s_BFu0s lv;
    check2(sizeof(lv), 4, "sizeof(I_BFu0s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu0s, I_BFu0s_BFu0s)
//============================================================================


struct  I_BFu0s_BFu15i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 I_BFu0s_BFu15i) C1{ Fi Fs:0 Fi:15}



static void Test_I_BFu0s_BFu15i()
{
  {
    init_simple_test("I_BFu0s_BFu15i");
    static STRUCT_IF_C I_BFu0s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu15i, I_BFu0s_BFu15i)
//============================================================================


struct  I_BFu0s_BFu15ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 I_BFu0s_BFu15ll) C1{ Fi Fs:0 FL:15}



static void Test_I_BFu0s_BFu15ll()
{
  {
    init_simple_test("I_BFu0s_BFu15ll");
    static STRUCT_IF_C I_BFu0s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu15ll, I_BFu0s_BFu15ll)
//============================================================================


struct  I_BFu0s_BFu15s  {
  int v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 I_BFu0s_BFu15s) C1{ Fi Fs:0 Fs:15}



static void Test_I_BFu0s_BFu15s()
{
  {
    init_simple_test("I_BFu0s_BFu15s");
    static STRUCT_IF_C I_BFu0s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu15s, I_BFu0s_BFu15s)
//============================================================================


struct  I_BFu0s_BFu16i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 I_BFu0s_BFu16i) C1{ Fi Fs:0 Fi:16}



static void Test_I_BFu0s_BFu16i()
{
  {
    init_simple_test("I_BFu0s_BFu16i");
    static STRUCT_IF_C I_BFu0s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu16i, I_BFu0s_BFu16i)
//============================================================================


struct  I_BFu0s_BFu16ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 I_BFu0s_BFu16ll) C1{ Fi Fs:0 FL:16}



static void Test_I_BFu0s_BFu16ll()
{
  {
    init_simple_test("I_BFu0s_BFu16ll");
    static STRUCT_IF_C I_BFu0s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu16ll, I_BFu0s_BFu16ll)
//============================================================================


struct  I_BFu0s_BFu16s  {
  int v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 I_BFu0s_BFu16s) C1{ Fi Fs:0 Fs:16}



static void Test_I_BFu0s_BFu16s()
{
  {
    init_simple_test("I_BFu0s_BFu16s");
    static STRUCT_IF_C I_BFu0s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu16s, I_BFu0s_BFu16s)
//============================================================================


struct  I_BFu0s_BFu17i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 I_BFu0s_BFu17i) C1{ Fi Fs:0 Fi:17}



static void Test_I_BFu0s_BFu17i()
{
  {
    init_simple_test("I_BFu0s_BFu17i");
    static STRUCT_IF_C I_BFu0s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu17i, I_BFu0s_BFu17i)
//============================================================================


struct  I_BFu0s_BFu17ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 I_BFu0s_BFu17ll) C1{ Fi Fs:0 FL:17}



static void Test_I_BFu0s_BFu17ll()
{
  {
    init_simple_test("I_BFu0s_BFu17ll");
    static STRUCT_IF_C I_BFu0s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu17ll, I_BFu0s_BFu17ll)
//============================================================================


struct  I_BFu0s_BFu1c  {
  int v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 I_BFu0s_BFu1c) C1{ Fi Fs:0 Fc:1}



static void Test_I_BFu0s_BFu1c()
{
  {
    init_simple_test("I_BFu0s_BFu1c");
    static STRUCT_IF_C I_BFu0s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu1c, I_BFu0s_BFu1c)
//============================================================================


struct  I_BFu0s_BFu1i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 I_BFu0s_BFu1i) C1{ Fi Fs:0 Fi:1}



static void Test_I_BFu0s_BFu1i()
{
  {
    init_simple_test("I_BFu0s_BFu1i");
    static STRUCT_IF_C I_BFu0s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu1i, I_BFu0s_BFu1i)
//============================================================================


struct  I_BFu0s_BFu1ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 I_BFu0s_BFu1ll) C1{ Fi Fs:0 FL:1}



static void Test_I_BFu0s_BFu1ll()
{
  {
    init_simple_test("I_BFu0s_BFu1ll");
    static STRUCT_IF_C I_BFu0s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu1ll, I_BFu0s_BFu1ll)
//============================================================================


struct  I_BFu0s_BFu1s  {
  int v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 I_BFu0s_BFu1s) C1{ Fi Fs:0 Fs:1}



static void Test_I_BFu0s_BFu1s()
{
  {
    init_simple_test("I_BFu0s_BFu1s");
    static STRUCT_IF_C I_BFu0s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu1s, I_BFu0s_BFu1s)
//============================================================================


struct  I_BFu0s_BFu31i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 I_BFu0s_BFu31i) C1{ Fi Fs:0 Fi:31}



static void Test_I_BFu0s_BFu31i()
{
  {
    init_simple_test("I_BFu0s_BFu31i");
    static STRUCT_IF_C I_BFu0s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu31i, I_BFu0s_BFu31i)
//============================================================================


struct  I_BFu0s_BFu31ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 I_BFu0s_BFu31ll) C1{ Fi Fs:0 FL:31}



static void Test_I_BFu0s_BFu31ll()
{
  {
    init_simple_test("I_BFu0s_BFu31ll");
    static STRUCT_IF_C I_BFu0s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu31ll, I_BFu0s_BFu31ll)
//============================================================================


struct  I_BFu0s_BFu32i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 I_BFu0s_BFu32i) C1{ Fi Fs:0 Fi:32}



static void Test_I_BFu0s_BFu32i()
{
  {
    init_simple_test("I_BFu0s_BFu32i");
    static STRUCT_IF_C I_BFu0s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu32i, I_BFu0s_BFu32i)
//============================================================================


struct  I_BFu0s_BFu32ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 I_BFu0s_BFu32ll) C1{ Fi Fs:0 FL:32}



static void Test_I_BFu0s_BFu32ll()
{
  {
    init_simple_test("I_BFu0s_BFu32ll");
    static STRUCT_IF_C I_BFu0s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu32ll, I_BFu0s_BFu32ll)
//============================================================================


struct  I_BFu0s_BFu33  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 I_BFu0s_BFu33) C1{ Fi Fs:0 FL:33}



static void Test_I_BFu0s_BFu33()
{
  {
    init_simple_test("I_BFu0s_BFu33");
    static STRUCT_IF_C I_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu33, I_BFu0s_BFu33)
//============================================================================


struct  I_BFu0s_BFu7c  {
  int v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 I_BFu0s_BFu7c) C1{ Fi Fs:0 Fc:7}



static void Test_I_BFu0s_BFu7c()
{
  {
    init_simple_test("I_BFu0s_BFu7c");
    static STRUCT_IF_C I_BFu0s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu7c, I_BFu0s_BFu7c)
//============================================================================


struct  I_BFu0s_BFu7i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 I_BFu0s_BFu7i) C1{ Fi Fs:0 Fi:7}



static void Test_I_BFu0s_BFu7i()
{
  {
    init_simple_test("I_BFu0s_BFu7i");
    static STRUCT_IF_C I_BFu0s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu7i, I_BFu0s_BFu7i)
//============================================================================


struct  I_BFu0s_BFu7ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 I_BFu0s_BFu7ll) C1{ Fi Fs:0 FL:7}



static void Test_I_BFu0s_BFu7ll()
{
  {
    init_simple_test("I_BFu0s_BFu7ll");
    static STRUCT_IF_C I_BFu0s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu7ll, I_BFu0s_BFu7ll)
//============================================================================


struct  I_BFu0s_BFu7s  {
  int v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 I_BFu0s_BFu7s) C1{ Fi Fs:0 Fs:7}



static void Test_I_BFu0s_BFu7s()
{
  {
    init_simple_test("I_BFu0s_BFu7s");
    static STRUCT_IF_C I_BFu0s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu7s, I_BFu0s_BFu7s)
//============================================================================


struct  I_BFu0s_BFu8c  {
  int v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 I_BFu0s_BFu8c) C1{ Fi Fs:0 Fc:8}



static void Test_I_BFu0s_BFu8c()
{
  {
    init_simple_test("I_BFu0s_BFu8c");
    static STRUCT_IF_C I_BFu0s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu8c, I_BFu0s_BFu8c)
//============================================================================


struct  I_BFu0s_BFu8i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 I_BFu0s_BFu8i) C1{ Fi Fs:0 Fi:8}



static void Test_I_BFu0s_BFu8i()
{
  {
    init_simple_test("I_BFu0s_BFu8i");
    static STRUCT_IF_C I_BFu0s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu8i, I_BFu0s_BFu8i)
//============================================================================


struct  I_BFu0s_BFu8ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 I_BFu0s_BFu8ll) C1{ Fi Fs:0 FL:8}



static void Test_I_BFu0s_BFu8ll()
{
  {
    init_simple_test("I_BFu0s_BFu8ll");
    static STRUCT_IF_C I_BFu0s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu8ll, I_BFu0s_BFu8ll)
//============================================================================


struct  I_BFu0s_BFu8s  {
  int v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 I_BFu0s_BFu8s) C1{ Fi Fs:0 Fs:8}



static void Test_I_BFu0s_BFu8s()
{
  {
    init_simple_test("I_BFu0s_BFu8s");
    static STRUCT_IF_C I_BFu0s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu8s, I_BFu0s_BFu8s)
//============================================================================


struct  I_BFu0s_BFu9i  {
  int v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 I_BFu0s_BFu9i) C1{ Fi Fs:0 Fi:9}



static void Test_I_BFu0s_BFu9i()
{
  {
    init_simple_test("I_BFu0s_BFu9i");
    static STRUCT_IF_C I_BFu0s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu9i, I_BFu0s_BFu9i)
//============================================================================


struct  I_BFu0s_BFu9ll  {
  int v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 I_BFu0s_BFu9ll) C1{ Fi Fs:0 FL:9}



static void Test_I_BFu0s_BFu9ll()
{
  {
    init_simple_test("I_BFu0s_BFu9ll");
    static STRUCT_IF_C I_BFu0s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu9ll, I_BFu0s_BFu9ll)
//============================================================================


struct  I_BFu0s_BFu9s  {
  int v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 I_BFu0s_BFu9s) C1{ Fi Fs:0 Fs:9}



static void Test_I_BFu0s_BFu9s()
{
  {
    init_simple_test("I_BFu0s_BFu9s");
    static STRUCT_IF_C I_BFu0s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "I_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_BFu9s, I_BFu0s_BFu9s)
//============================================================================


struct  I_BFu0s_C  {
  int v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 I_BFu0s_C) C1{ Fi Fs:0 Fc}



static void Test_I_BFu0s_C()
{
  {
    init_simple_test("I_BFu0s_C");
    static STRUCT_IF_C I_BFu0s_C lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_C)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_C)");
    check_field_offset(lv, v1, 0, "I_BFu0s_C.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_C, I_BFu0s_C)
//============================================================================


struct  I_BFu0s_D  {
  int v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 I_BFu0s_D) C1{ Fi Fs:0 FL}



static void Test_I_BFu0s_D()
{
  {
    init_simple_test("I_BFu0s_D");
    static STRUCT_IF_C I_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_D)");
    check_field_offset(lv, v1, 0, "I_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_D, I_BFu0s_D)
//============================================================================


struct  I_BFu0s_F  {
  int v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 I_BFu0s_F) C1{ Fi Fs:0 Fi}



static void Test_I_BFu0s_F()
{
  {
    init_simple_test("I_BFu0s_F");
    static STRUCT_IF_C I_BFu0s_F lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_F)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_F)");
    check_field_offset(lv, v1, 0, "I_BFu0s_F.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_F, I_BFu0s_F)
//============================================================================


struct  I_BFu0s_I  {
  int v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 I_BFu0s_I) C1{ Fi Fs:0 Fi}



static void Test_I_BFu0s_I()
{
  {
    init_simple_test("I_BFu0s_I");
    static STRUCT_IF_C I_BFu0s_I lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_I)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_I)");
    check_field_offset(lv, v1, 0, "I_BFu0s_I.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_I, I_BFu0s_I)
//============================================================================


struct  I_BFu0s_Ip  {
  int v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 I_BFu0s_Ip) C1{ Fi Fs:0 Fp}



static void Test_I_BFu0s_Ip()
{
  {
    init_simple_test("I_BFu0s_Ip");
    static STRUCT_IF_C I_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "I_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_Ip, I_BFu0s_Ip)
//============================================================================


struct  I_BFu0s_L  {
  int v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 I_BFu0s_L) C1{ Fi Fs:0 FL}



static void Test_I_BFu0s_L()
{
  {
    init_simple_test("I_BFu0s_L");
    static STRUCT_IF_C I_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_L)");
    check_field_offset(lv, v1, 0, "I_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_L, I_BFu0s_L)
//============================================================================


struct  I_BFu0s_S  {
  int v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 I_BFu0s_S) C1{ Fi Fs:0 Fs}



static void Test_I_BFu0s_S()
{
  {
    init_simple_test("I_BFu0s_S");
    static STRUCT_IF_C I_BFu0s_S lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_S)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_S)");
    check_field_offset(lv, v1, 0, "I_BFu0s_S.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_S, I_BFu0s_S)
//============================================================================


struct  I_BFu0s_Uc  {
  int v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 I_BFu0s_Uc) C1{ Fi Fs:0 Fc}



static void Test_I_BFu0s_Uc()
{
  {
    init_simple_test("I_BFu0s_Uc");
    static STRUCT_IF_C I_BFu0s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "I_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_Uc, I_BFu0s_Uc)
//============================================================================


struct  I_BFu0s_Ui  {
  int v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 I_BFu0s_Ui) C1{ Fi Fs:0 Fi}



static void Test_I_BFu0s_Ui()
{
  {
    init_simple_test("I_BFu0s_Ui");
    static STRUCT_IF_C I_BFu0s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "I_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_Ui, I_BFu0s_Ui)
//============================================================================


struct  I_BFu0s_Ul  {
  int v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 I_BFu0s_Ul) C1{ Fi Fs:0 FL}



static void Test_I_BFu0s_Ul()
{
  {
    init_simple_test("I_BFu0s_Ul");
    static STRUCT_IF_C I_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "I_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_Ul, I_BFu0s_Ul)
//============================================================================


struct  I_BFu0s_Us  {
  int v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 I_BFu0s_Us) C1{ Fi Fs:0 Fs}



static void Test_I_BFu0s_Us()
{
  {
    init_simple_test("I_BFu0s_Us");
    static STRUCT_IF_C I_BFu0s_Us lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu0s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "I_BFu0s_Us.v1");
    check_field_offset(lv, v2, 4, "I_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_Us, I_BFu0s_Us)
//============================================================================


struct  I_BFu0s_Vp  {
  int v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 I_BFu0s_Vp) C1{ Fi Fs:0 Fp}



static void Test_I_BFu0s_Vp()
{
  {
    init_simple_test("I_BFu0s_Vp");
    static STRUCT_IF_C I_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "I_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu0s_Vp, I_BFu0s_Vp)
//============================================================================


struct  I_BFu15i_BFu0c  {
  int v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 I_BFu15i_BFu0c) C1{ Fi Fi:15 Fc:0}



static void Test_I_BFu15i_BFu0c()
{
  {
    init_simple_test("I_BFu15i_BFu0c");
    static STRUCT_IF_C I_BFu15i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15i_BFu0c, I_BFu15i_BFu0c)
//============================================================================


struct  I_BFu15i_BFu0i  {
  int v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 I_BFu15i_BFu0i) C1{ Fi Fi:15 Fi:0}



static void Test_I_BFu15i_BFu0i()
{
  {
    init_simple_test("I_BFu15i_BFu0i");
    static STRUCT_IF_C I_BFu15i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15i_BFu0i, I_BFu15i_BFu0i)
//============================================================================


struct  I_BFu15i_BFu0ll  {
  int v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 I_BFu15i_BFu0ll) C1{ Fi Fi:15 FL:0}



static void Test_I_BFu15i_BFu0ll()
{
  {
    init_simple_test("I_BFu15i_BFu0ll");
    static STRUCT_IF_C I_BFu15i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15i_BFu0ll, I_BFu15i_BFu0ll)
//============================================================================


struct  I_BFu15i_BFu0s  {
  int v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 I_BFu15i_BFu0s) C1{ Fi Fi:15 Fs:0}



static void Test_I_BFu15i_BFu0s()
{
  {
    init_simple_test("I_BFu15i_BFu0s");
    static STRUCT_IF_C I_BFu15i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15i_BFu0s, I_BFu15i_BFu0s)
//============================================================================


struct  I_BFu15ll_BFu0c  {
  int v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 I_BFu15ll_BFu0c) C1{ Fi FL:15 Fc:0}



static void Test_I_BFu15ll_BFu0c()
{
  {
    init_simple_test("I_BFu15ll_BFu0c");
    static STRUCT_IF_C I_BFu15ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15ll_BFu0c, I_BFu15ll_BFu0c)
//============================================================================


struct  I_BFu15ll_BFu0i  {
  int v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 I_BFu15ll_BFu0i) C1{ Fi FL:15 Fi:0}



static void Test_I_BFu15ll_BFu0i()
{
  {
    init_simple_test("I_BFu15ll_BFu0i");
    static STRUCT_IF_C I_BFu15ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15ll_BFu0i, I_BFu15ll_BFu0i)
//============================================================================


struct  I_BFu15ll_BFu0ll  {
  int v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 I_BFu15ll_BFu0ll) C1{ Fi FL:15 FL:0}



static void Test_I_BFu15ll_BFu0ll()
{
  {
    init_simple_test("I_BFu15ll_BFu0ll");
    static STRUCT_IF_C I_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15ll_BFu0ll, I_BFu15ll_BFu0ll)
//============================================================================


struct  I_BFu15ll_BFu0s  {
  int v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 I_BFu15ll_BFu0s) C1{ Fi FL:15 Fs:0}



static void Test_I_BFu15ll_BFu0s()
{
  {
    init_simple_test("I_BFu15ll_BFu0s");
    static STRUCT_IF_C I_BFu15ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15ll_BFu0s, I_BFu15ll_BFu0s)
//============================================================================


struct  I_BFu15s_BFu0c  {
  int v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 I_BFu15s_BFu0c) C1{ Fi Fs:15 Fc:0}



static void Test_I_BFu15s_BFu0c()
{
  {
    init_simple_test("I_BFu15s_BFu0c");
    static STRUCT_IF_C I_BFu15s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15s_BFu0c, I_BFu15s_BFu0c)
//============================================================================


struct  I_BFu15s_BFu0i  {
  int v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 I_BFu15s_BFu0i) C1{ Fi Fs:15 Fi:0}



static void Test_I_BFu15s_BFu0i()
{
  {
    init_simple_test("I_BFu15s_BFu0i");
    static STRUCT_IF_C I_BFu15s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15s_BFu0i, I_BFu15s_BFu0i)
//============================================================================


struct  I_BFu15s_BFu0ll  {
  int v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 I_BFu15s_BFu0ll) C1{ Fi Fs:15 FL:0}



static void Test_I_BFu15s_BFu0ll()
{
  {
    init_simple_test("I_BFu15s_BFu0ll");
    static STRUCT_IF_C I_BFu15s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15s_BFu0ll, I_BFu15s_BFu0ll)
//============================================================================


struct  I_BFu15s_BFu0s  {
  int v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 I_BFu15s_BFu0s) C1{ Fi Fs:15 Fs:0}



static void Test_I_BFu15s_BFu0s()
{
  {
    init_simple_test("I_BFu15s_BFu0s");
    static STRUCT_IF_C I_BFu15s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu15s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 15, 1, "I_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 15, hide_ull(1LL<<14), "I_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu15s_BFu0s, I_BFu15s_BFu0s)
//============================================================================


struct  I_BFu16i_BFu0c  {
  int v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 I_BFu16i_BFu0c) C1{ Fi Fi:16 Fc:0}



static void Test_I_BFu16i_BFu0c()
{
  {
    init_simple_test("I_BFu16i_BFu0c");
    static STRUCT_IF_C I_BFu16i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16i_BFu0c, I_BFu16i_BFu0c)
//============================================================================


struct  I_BFu16i_BFu0i  {
  int v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 I_BFu16i_BFu0i) C1{ Fi Fi:16 Fi:0}



static void Test_I_BFu16i_BFu0i()
{
  {
    init_simple_test("I_BFu16i_BFu0i");
    static STRUCT_IF_C I_BFu16i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16i_BFu0i, I_BFu16i_BFu0i)
//============================================================================


struct  I_BFu16i_BFu0ll  {
  int v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 I_BFu16i_BFu0ll) C1{ Fi Fi:16 FL:0}



static void Test_I_BFu16i_BFu0ll()
{
  {
    init_simple_test("I_BFu16i_BFu0ll");
    static STRUCT_IF_C I_BFu16i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16i_BFu0ll, I_BFu16i_BFu0ll)
//============================================================================


struct  I_BFu16i_BFu0s  {
  int v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 I_BFu16i_BFu0s) C1{ Fi Fi:16 Fs:0}



static void Test_I_BFu16i_BFu0s()
{
  {
    init_simple_test("I_BFu16i_BFu0s");
    static STRUCT_IF_C I_BFu16i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16i_BFu0s, I_BFu16i_BFu0s)
//============================================================================


struct  I_BFu16ll_BFu0c  {
  int v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 I_BFu16ll_BFu0c) C1{ Fi FL:16 Fc:0}



static void Test_I_BFu16ll_BFu0c()
{
  {
    init_simple_test("I_BFu16ll_BFu0c");
    static STRUCT_IF_C I_BFu16ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16ll_BFu0c, I_BFu16ll_BFu0c)
//============================================================================


struct  I_BFu16ll_BFu0i  {
  int v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 I_BFu16ll_BFu0i) C1{ Fi FL:16 Fi:0}



static void Test_I_BFu16ll_BFu0i()
{
  {
    init_simple_test("I_BFu16ll_BFu0i");
    static STRUCT_IF_C I_BFu16ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16ll_BFu0i, I_BFu16ll_BFu0i)
//============================================================================


struct  I_BFu16ll_BFu0ll  {
  int v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 I_BFu16ll_BFu0ll) C1{ Fi FL:16 FL:0}



static void Test_I_BFu16ll_BFu0ll()
{
  {
    init_simple_test("I_BFu16ll_BFu0ll");
    static STRUCT_IF_C I_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16ll_BFu0ll, I_BFu16ll_BFu0ll)
//============================================================================


struct  I_BFu16ll_BFu0s  {
  int v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 I_BFu16ll_BFu0s) C1{ Fi FL:16 Fs:0}



static void Test_I_BFu16ll_BFu0s()
{
  {
    init_simple_test("I_BFu16ll_BFu0s");
    static STRUCT_IF_C I_BFu16ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16ll_BFu0s, I_BFu16ll_BFu0s)
//============================================================================


struct  I_BFu16s_BFu0c  {
  int v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 I_BFu16s_BFu0c) C1{ Fi Fs:16 Fc:0}



static void Test_I_BFu16s_BFu0c()
{
  {
    init_simple_test("I_BFu16s_BFu0c");
    static STRUCT_IF_C I_BFu16s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16s_BFu0c, I_BFu16s_BFu0c)
//============================================================================


struct  I_BFu16s_BFu0i  {
  int v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 I_BFu16s_BFu0i) C1{ Fi Fs:16 Fi:0}



static void Test_I_BFu16s_BFu0i()
{
  {
    init_simple_test("I_BFu16s_BFu0i");
    static STRUCT_IF_C I_BFu16s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16s_BFu0i, I_BFu16s_BFu0i)
//============================================================================


struct  I_BFu16s_BFu0ll  {
  int v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 I_BFu16s_BFu0ll) C1{ Fi Fs:16 FL:0}



static void Test_I_BFu16s_BFu0ll()
{
  {
    init_simple_test("I_BFu16s_BFu0ll");
    static STRUCT_IF_C I_BFu16s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16s_BFu0ll, I_BFu16s_BFu0ll)
//============================================================================


struct  I_BFu16s_BFu0s  {
  int v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 I_BFu16s_BFu0s) C1{ Fi Fs:16 Fs:0}



static void Test_I_BFu16s_BFu0s()
{
  {
    init_simple_test("I_BFu16s_BFu0s");
    static STRUCT_IF_C I_BFu16s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu16s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 16, 1, "I_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 16, hide_ull(1LL<<15), "I_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu16s_BFu0s, I_BFu16s_BFu0s)
//============================================================================


struct  I_BFu17i_BFu0c  {
  int v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 I_BFu17i_BFu0c) C1{ Fi Fi:17 Fc:0}



static void Test_I_BFu17i_BFu0c()
{
  {
    init_simple_test("I_BFu17i_BFu0c");
    static STRUCT_IF_C I_BFu17i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17i_BFu0c, I_BFu17i_BFu0c)
//============================================================================


struct  I_BFu17i_BFu0i  {
  int v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 I_BFu17i_BFu0i) C1{ Fi Fi:17 Fi:0}



static void Test_I_BFu17i_BFu0i()
{
  {
    init_simple_test("I_BFu17i_BFu0i");
    static STRUCT_IF_C I_BFu17i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17i_BFu0i, I_BFu17i_BFu0i)
//============================================================================


struct  I_BFu17i_BFu0ll  {
  int v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 I_BFu17i_BFu0ll) C1{ Fi Fi:17 FL:0}



static void Test_I_BFu17i_BFu0ll()
{
  {
    init_simple_test("I_BFu17i_BFu0ll");
    static STRUCT_IF_C I_BFu17i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17i_BFu0ll, I_BFu17i_BFu0ll)
//============================================================================


struct  I_BFu17i_BFu0s  {
  int v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 I_BFu17i_BFu0s) C1{ Fi Fi:17 Fs:0}



static void Test_I_BFu17i_BFu0s()
{
  {
    init_simple_test("I_BFu17i_BFu0s");
    static STRUCT_IF_C I_BFu17i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17i_BFu0s, I_BFu17i_BFu0s)
//============================================================================


struct  I_BFu17ll_BFu0c  {
  int v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 I_BFu17ll_BFu0c) C1{ Fi FL:17 Fc:0}



static void Test_I_BFu17ll_BFu0c()
{
  {
    init_simple_test("I_BFu17ll_BFu0c");
    static STRUCT_IF_C I_BFu17ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17ll_BFu0c, I_BFu17ll_BFu0c)
//============================================================================


struct  I_BFu17ll_BFu0i  {
  int v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 I_BFu17ll_BFu0i) C1{ Fi FL:17 Fi:0}



static void Test_I_BFu17ll_BFu0i()
{
  {
    init_simple_test("I_BFu17ll_BFu0i");
    static STRUCT_IF_C I_BFu17ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17ll_BFu0i, I_BFu17ll_BFu0i)
//============================================================================


struct  I_BFu17ll_BFu0ll  {
  int v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 I_BFu17ll_BFu0ll) C1{ Fi FL:17 FL:0}



static void Test_I_BFu17ll_BFu0ll()
{
  {
    init_simple_test("I_BFu17ll_BFu0ll");
    static STRUCT_IF_C I_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17ll_BFu0ll, I_BFu17ll_BFu0ll)
//============================================================================


struct  I_BFu17ll_BFu0s  {
  int v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 I_BFu17ll_BFu0s) C1{ Fi FL:17 Fs:0}



static void Test_I_BFu17ll_BFu0s()
{
  {
    init_simple_test("I_BFu17ll_BFu0s");
    static STRUCT_IF_C I_BFu17ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 17, 1, "I_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 17, hide_ull(1LL<<16), "I_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu17ll_BFu0s, I_BFu17ll_BFu0s)
//============================================================================


struct  I_BFu1c_BFu0c  {
  int v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 I_BFu1c_BFu0c) C1{ Fi Fc:1 Fc:0}



static void Test_I_BFu1c_BFu0c()
{
  {
    init_simple_test("I_BFu1c_BFu0c");
    static STRUCT_IF_C I_BFu1c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1c_BFu0c, I_BFu1c_BFu0c)
//============================================================================


struct  I_BFu1c_BFu0i  {
  int v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 I_BFu1c_BFu0i) C1{ Fi Fc:1 Fi:0}



static void Test_I_BFu1c_BFu0i()
{
  {
    init_simple_test("I_BFu1c_BFu0i");
    static STRUCT_IF_C I_BFu1c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1c_BFu0i, I_BFu1c_BFu0i)
//============================================================================


struct  I_BFu1c_BFu0ll  {
  int v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 I_BFu1c_BFu0ll) C1{ Fi Fc:1 FL:0}



static void Test_I_BFu1c_BFu0ll()
{
  {
    init_simple_test("I_BFu1c_BFu0ll");
    static STRUCT_IF_C I_BFu1c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1c_BFu0ll, I_BFu1c_BFu0ll)
//============================================================================


struct  I_BFu1c_BFu0s  {
  int v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 I_BFu1c_BFu0s) C1{ Fi Fc:1 Fs:0}



static void Test_I_BFu1c_BFu0s()
{
  {
    init_simple_test("I_BFu1c_BFu0s");
    static STRUCT_IF_C I_BFu1c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1c_BFu0s, I_BFu1c_BFu0s)
//============================================================================


struct  I_BFu1i_BFu0c  {
  int v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 I_BFu1i_BFu0c) C1{ Fi Fi:1 Fc:0}



static void Test_I_BFu1i_BFu0c()
{
  {
    init_simple_test("I_BFu1i_BFu0c");
    static STRUCT_IF_C I_BFu1i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1i_BFu0c, I_BFu1i_BFu0c)
//============================================================================


struct  I_BFu1i_BFu0i  {
  int v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 I_BFu1i_BFu0i) C1{ Fi Fi:1 Fi:0}



static void Test_I_BFu1i_BFu0i()
{
  {
    init_simple_test("I_BFu1i_BFu0i");
    static STRUCT_IF_C I_BFu1i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1i_BFu0i, I_BFu1i_BFu0i)
//============================================================================


struct  I_BFu1i_BFu0ll  {
  int v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 I_BFu1i_BFu0ll) C1{ Fi Fi:1 FL:0}



static void Test_I_BFu1i_BFu0ll()
{
  {
    init_simple_test("I_BFu1i_BFu0ll");
    static STRUCT_IF_C I_BFu1i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1i_BFu0ll, I_BFu1i_BFu0ll)
//============================================================================


struct  I_BFu1i_BFu0s  {
  int v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 I_BFu1i_BFu0s) C1{ Fi Fi:1 Fs:0}



static void Test_I_BFu1i_BFu0s()
{
  {
    init_simple_test("I_BFu1i_BFu0s");
    static STRUCT_IF_C I_BFu1i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1i_BFu0s, I_BFu1i_BFu0s)
//============================================================================


struct  I_BFu1ll_BFu0c  {
  int v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 I_BFu1ll_BFu0c) C1{ Fi FL:1 Fc:0}



static void Test_I_BFu1ll_BFu0c()
{
  {
    init_simple_test("I_BFu1ll_BFu0c");
    static STRUCT_IF_C I_BFu1ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1ll_BFu0c, I_BFu1ll_BFu0c)
//============================================================================


struct  I_BFu1ll_BFu0i  {
  int v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 I_BFu1ll_BFu0i) C1{ Fi FL:1 Fi:0}



static void Test_I_BFu1ll_BFu0i()
{
  {
    init_simple_test("I_BFu1ll_BFu0i");
    static STRUCT_IF_C I_BFu1ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1ll_BFu0i, I_BFu1ll_BFu0i)
//============================================================================


struct  I_BFu1ll_BFu0ll  {
  int v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 I_BFu1ll_BFu0ll) C1{ Fi FL:1 FL:0}



static void Test_I_BFu1ll_BFu0ll()
{
  {
    init_simple_test("I_BFu1ll_BFu0ll");
    static STRUCT_IF_C I_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1ll_BFu0ll, I_BFu1ll_BFu0ll)
//============================================================================


struct  I_BFu1ll_BFu0s  {
  int v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 I_BFu1ll_BFu0s) C1{ Fi FL:1 Fs:0}



static void Test_I_BFu1ll_BFu0s()
{
  {
    init_simple_test("I_BFu1ll_BFu0s");
    static STRUCT_IF_C I_BFu1ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1ll_BFu0s, I_BFu1ll_BFu0s)
//============================================================================


struct  I_BFu1s_BFu0c  {
  int v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 I_BFu1s_BFu0c) C1{ Fi Fs:1 Fc:0}



static void Test_I_BFu1s_BFu0c()
{
  {
    init_simple_test("I_BFu1s_BFu0c");
    static STRUCT_IF_C I_BFu1s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1s_BFu0c, I_BFu1s_BFu0c)
//============================================================================


struct  I_BFu1s_BFu0i  {
  int v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 I_BFu1s_BFu0i) C1{ Fi Fs:1 Fi:0}



static void Test_I_BFu1s_BFu0i()
{
  {
    init_simple_test("I_BFu1s_BFu0i");
    static STRUCT_IF_C I_BFu1s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1s_BFu0i, I_BFu1s_BFu0i)
//============================================================================


struct  I_BFu1s_BFu0ll  {
  int v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 I_BFu1s_BFu0ll) C1{ Fi Fs:1 FL:0}



static void Test_I_BFu1s_BFu0ll()
{
  {
    init_simple_test("I_BFu1s_BFu0ll");
    static STRUCT_IF_C I_BFu1s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1s_BFu0ll, I_BFu1s_BFu0ll)
//============================================================================


struct  I_BFu1s_BFu0s  {
  int v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 I_BFu1s_BFu0s) C1{ Fi Fs:1 Fs:0}



static void Test_I_BFu1s_BFu0s()
{
  {
    init_simple_test("I_BFu1s_BFu0s");
    static STRUCT_IF_C I_BFu1s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu1s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 1, 1, "I_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu1s_BFu0s, I_BFu1s_BFu0s)
//============================================================================


struct  I_BFu31i_BFu0c  {
  int v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 I_BFu31i_BFu0c) C1{ Fi Fi:31 Fc:0}



static void Test_I_BFu31i_BFu0c()
{
  {
    init_simple_test("I_BFu31i_BFu0c");
    static STRUCT_IF_C I_BFu31i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31i_BFu0c, I_BFu31i_BFu0c)
//============================================================================


struct  I_BFu31i_BFu0i  {
  int v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 I_BFu31i_BFu0i) C1{ Fi Fi:31 Fi:0}



static void Test_I_BFu31i_BFu0i()
{
  {
    init_simple_test("I_BFu31i_BFu0i");
    static STRUCT_IF_C I_BFu31i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31i_BFu0i, I_BFu31i_BFu0i)
//============================================================================


struct  I_BFu31i_BFu0ll  {
  int v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 I_BFu31i_BFu0ll) C1{ Fi Fi:31 FL:0}



static void Test_I_BFu31i_BFu0ll()
{
  {
    init_simple_test("I_BFu31i_BFu0ll");
    static STRUCT_IF_C I_BFu31i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31i_BFu0ll, I_BFu31i_BFu0ll)
//============================================================================


struct  I_BFu31i_BFu0s  {
  int v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 I_BFu31i_BFu0s) C1{ Fi Fi:31 Fs:0}



static void Test_I_BFu31i_BFu0s()
{
  {
    init_simple_test("I_BFu31i_BFu0s");
    static STRUCT_IF_C I_BFu31i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31i_BFu0s, I_BFu31i_BFu0s)
//============================================================================


struct  I_BFu31ll_BFu0c  {
  int v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 I_BFu31ll_BFu0c) C1{ Fi FL:31 Fc:0}



static void Test_I_BFu31ll_BFu0c()
{
  {
    init_simple_test("I_BFu31ll_BFu0c");
    static STRUCT_IF_C I_BFu31ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31ll_BFu0c, I_BFu31ll_BFu0c)
//============================================================================


struct  I_BFu31ll_BFu0i  {
  int v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 I_BFu31ll_BFu0i) C1{ Fi FL:31 Fi:0}



static void Test_I_BFu31ll_BFu0i()
{
  {
    init_simple_test("I_BFu31ll_BFu0i");
    static STRUCT_IF_C I_BFu31ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31ll_BFu0i, I_BFu31ll_BFu0i)
//============================================================================


struct  I_BFu31ll_BFu0ll  {
  int v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 I_BFu31ll_BFu0ll) C1{ Fi FL:31 FL:0}



static void Test_I_BFu31ll_BFu0ll()
{
  {
    init_simple_test("I_BFu31ll_BFu0ll");
    static STRUCT_IF_C I_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31ll_BFu0ll, I_BFu31ll_BFu0ll)
//============================================================================


struct  I_BFu31ll_BFu0s  {
  int v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 I_BFu31ll_BFu0s) C1{ Fi FL:31 Fs:0}



static void Test_I_BFu31ll_BFu0s()
{
  {
    init_simple_test("I_BFu31ll_BFu0s");
    static STRUCT_IF_C I_BFu31ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "I_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "I_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu31ll_BFu0s, I_BFu31ll_BFu0s)
//============================================================================


struct  I_BFu32i_BFu0c  {
  int v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 I_BFu32i_BFu0c) C1{ Fi Fi:32 Fc:0}



static void Test_I_BFu32i_BFu0c()
{
  {
    init_simple_test("I_BFu32i_BFu0c");
    static STRUCT_IF_C I_BFu32i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32i_BFu0c, I_BFu32i_BFu0c)
//============================================================================


struct  I_BFu32i_BFu0i  {
  int v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 I_BFu32i_BFu0i) C1{ Fi Fi:32 Fi:0}



static void Test_I_BFu32i_BFu0i()
{
  {
    init_simple_test("I_BFu32i_BFu0i");
    static STRUCT_IF_C I_BFu32i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32i_BFu0i, I_BFu32i_BFu0i)
//============================================================================


struct  I_BFu32i_BFu0ll  {
  int v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 I_BFu32i_BFu0ll) C1{ Fi Fi:32 FL:0}



static void Test_I_BFu32i_BFu0ll()
{
  {
    init_simple_test("I_BFu32i_BFu0ll");
    static STRUCT_IF_C I_BFu32i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32i_BFu0ll, I_BFu32i_BFu0ll)
//============================================================================


struct  I_BFu32i_BFu0s  {
  int v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 I_BFu32i_BFu0s) C1{ Fi Fi:32 Fs:0}



static void Test_I_BFu32i_BFu0s()
{
  {
    init_simple_test("I_BFu32i_BFu0s");
    static STRUCT_IF_C I_BFu32i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32i_BFu0s, I_BFu32i_BFu0s)
//============================================================================


struct  I_BFu32ll_BFu0c  {
  int v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 I_BFu32ll_BFu0c) C1{ Fi FL:32 Fc:0}



static void Test_I_BFu32ll_BFu0c()
{
  {
    init_simple_test("I_BFu32ll_BFu0c");
    static STRUCT_IF_C I_BFu32ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32ll_BFu0c, I_BFu32ll_BFu0c)
//============================================================================


struct  I_BFu32ll_BFu0i  {
  int v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 I_BFu32ll_BFu0i) C1{ Fi FL:32 Fi:0}



static void Test_I_BFu32ll_BFu0i()
{
  {
    init_simple_test("I_BFu32ll_BFu0i");
    static STRUCT_IF_C I_BFu32ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32ll_BFu0i, I_BFu32ll_BFu0i)
//============================================================================


struct  I_BFu32ll_BFu0ll  {
  int v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 I_BFu32ll_BFu0ll) C1{ Fi FL:32 FL:0}



static void Test_I_BFu32ll_BFu0ll()
{
  {
    init_simple_test("I_BFu32ll_BFu0ll");
    static STRUCT_IF_C I_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32ll_BFu0ll, I_BFu32ll_BFu0ll)
//============================================================================


struct  I_BFu32ll_BFu0s  {
  int v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 I_BFu32ll_BFu0s) C1{ Fi FL:32 Fs:0}



static void Test_I_BFu32ll_BFu0s()
{
  {
    init_simple_test("I_BFu32ll_BFu0s");
    static STRUCT_IF_C I_BFu32ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "I_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "I_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu32ll_BFu0s, I_BFu32ll_BFu0s)
//============================================================================


struct  I_BFu33_BFu0c  {
  int v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 I_BFu33_BFu0c) C1{ Fi FL:33 Fc:0}



static void Test_I_BFu33_BFu0c()
{
  {
    init_simple_test("I_BFu33_BFu0c");
    static STRUCT_IF_C I_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu33_BFu0c, I_BFu33_BFu0c)
//============================================================================


struct  I_BFu33_BFu0i  {
  int v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 I_BFu33_BFu0i) C1{ Fi FL:33 Fi:0}



static void Test_I_BFu33_BFu0i()
{
  {
    init_simple_test("I_BFu33_BFu0i");
    static STRUCT_IF_C I_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu33_BFu0i, I_BFu33_BFu0i)
//============================================================================


struct  I_BFu33_BFu0ll  {
  int v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 I_BFu33_BFu0ll) C1{ Fi FL:33 FL:0}



static void Test_I_BFu33_BFu0ll()
{
  {
    init_simple_test("I_BFu33_BFu0ll");
    static STRUCT_IF_C I_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu33_BFu0ll, I_BFu33_BFu0ll)
//============================================================================


struct  I_BFu33_BFu0s  {
  int v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 I_BFu33_BFu0s) C1{ Fi FL:33 Fs:0}



static void Test_I_BFu33_BFu0s()
{
  {
    init_simple_test("I_BFu33_BFu0s");
    static STRUCT_IF_C I_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "I_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "I_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu33_BFu0s, I_BFu33_BFu0s)
//============================================================================


struct  I_BFu7c_BFu0c  {
  int v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 I_BFu7c_BFu0c) C1{ Fi Fc:7 Fc:0}



static void Test_I_BFu7c_BFu0c()
{
  {
    init_simple_test("I_BFu7c_BFu0c");
    static STRUCT_IF_C I_BFu7c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7c_BFu0c, I_BFu7c_BFu0c)
//============================================================================


struct  I_BFu7c_BFu0i  {
  int v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 I_BFu7c_BFu0i) C1{ Fi Fc:7 Fi:0}



static void Test_I_BFu7c_BFu0i()
{
  {
    init_simple_test("I_BFu7c_BFu0i");
    static STRUCT_IF_C I_BFu7c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7c_BFu0i, I_BFu7c_BFu0i)
//============================================================================


struct  I_BFu7c_BFu0ll  {
  int v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 I_BFu7c_BFu0ll) C1{ Fi Fc:7 FL:0}



static void Test_I_BFu7c_BFu0ll()
{
  {
    init_simple_test("I_BFu7c_BFu0ll");
    static STRUCT_IF_C I_BFu7c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7c_BFu0ll, I_BFu7c_BFu0ll)
//============================================================================


struct  I_BFu7c_BFu0s  {
  int v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 I_BFu7c_BFu0s) C1{ Fi Fc:7 Fs:0}



static void Test_I_BFu7c_BFu0s()
{
  {
    init_simple_test("I_BFu7c_BFu0s");
    static STRUCT_IF_C I_BFu7c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7c_BFu0s, I_BFu7c_BFu0s)
//============================================================================


struct  I_BFu7i_BFu0c  {
  int v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 I_BFu7i_BFu0c) C1{ Fi Fi:7 Fc:0}



static void Test_I_BFu7i_BFu0c()
{
  {
    init_simple_test("I_BFu7i_BFu0c");
    static STRUCT_IF_C I_BFu7i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7i_BFu0c, I_BFu7i_BFu0c)
//============================================================================


struct  I_BFu7i_BFu0i  {
  int v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 I_BFu7i_BFu0i) C1{ Fi Fi:7 Fi:0}



static void Test_I_BFu7i_BFu0i()
{
  {
    init_simple_test("I_BFu7i_BFu0i");
    static STRUCT_IF_C I_BFu7i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7i_BFu0i, I_BFu7i_BFu0i)
//============================================================================


struct  I_BFu7i_BFu0ll  {
  int v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 I_BFu7i_BFu0ll) C1{ Fi Fi:7 FL:0}



static void Test_I_BFu7i_BFu0ll()
{
  {
    init_simple_test("I_BFu7i_BFu0ll");
    static STRUCT_IF_C I_BFu7i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7i_BFu0ll, I_BFu7i_BFu0ll)
//============================================================================


struct  I_BFu7i_BFu0s  {
  int v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 I_BFu7i_BFu0s) C1{ Fi Fi:7 Fs:0}



static void Test_I_BFu7i_BFu0s()
{
  {
    init_simple_test("I_BFu7i_BFu0s");
    static STRUCT_IF_C I_BFu7i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7i_BFu0s, I_BFu7i_BFu0s)
//============================================================================


struct  I_BFu7ll_BFu0c  {
  int v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 I_BFu7ll_BFu0c) C1{ Fi FL:7 Fc:0}



static void Test_I_BFu7ll_BFu0c()
{
  {
    init_simple_test("I_BFu7ll_BFu0c");
    static STRUCT_IF_C I_BFu7ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7ll_BFu0c, I_BFu7ll_BFu0c)
//============================================================================


struct  I_BFu7ll_BFu0i  {
  int v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 I_BFu7ll_BFu0i) C1{ Fi FL:7 Fi:0}



static void Test_I_BFu7ll_BFu0i()
{
  {
    init_simple_test("I_BFu7ll_BFu0i");
    static STRUCT_IF_C I_BFu7ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7ll_BFu0i, I_BFu7ll_BFu0i)
//============================================================================


struct  I_BFu7ll_BFu0ll  {
  int v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 I_BFu7ll_BFu0ll) C1{ Fi FL:7 FL:0}



static void Test_I_BFu7ll_BFu0ll()
{
  {
    init_simple_test("I_BFu7ll_BFu0ll");
    static STRUCT_IF_C I_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7ll_BFu0ll, I_BFu7ll_BFu0ll)
//============================================================================


struct  I_BFu7ll_BFu0s  {
  int v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 I_BFu7ll_BFu0s) C1{ Fi FL:7 Fs:0}



static void Test_I_BFu7ll_BFu0s()
{
  {
    init_simple_test("I_BFu7ll_BFu0s");
    static STRUCT_IF_C I_BFu7ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7ll_BFu0s, I_BFu7ll_BFu0s)
//============================================================================


struct  I_BFu7s_BFu0c  {
  int v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 I_BFu7s_BFu0c) C1{ Fi Fs:7 Fc:0}



static void Test_I_BFu7s_BFu0c()
{
  {
    init_simple_test("I_BFu7s_BFu0c");
    static STRUCT_IF_C I_BFu7s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7s_BFu0c, I_BFu7s_BFu0c)
//============================================================================


struct  I_BFu7s_BFu0i  {
  int v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 I_BFu7s_BFu0i) C1{ Fi Fs:7 Fi:0}



static void Test_I_BFu7s_BFu0i()
{
  {
    init_simple_test("I_BFu7s_BFu0i");
    static STRUCT_IF_C I_BFu7s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7s_BFu0i, I_BFu7s_BFu0i)
//============================================================================


struct  I_BFu7s_BFu0ll  {
  int v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 I_BFu7s_BFu0ll) C1{ Fi Fs:7 FL:0}



static void Test_I_BFu7s_BFu0ll()
{
  {
    init_simple_test("I_BFu7s_BFu0ll");
    static STRUCT_IF_C I_BFu7s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7s_BFu0ll, I_BFu7s_BFu0ll)
//============================================================================


struct  I_BFu7s_BFu0s  {
  int v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 I_BFu7s_BFu0s) C1{ Fi Fs:7 Fs:0}



static void Test_I_BFu7s_BFu0s()
{
  {
    init_simple_test("I_BFu7s_BFu0s");
    static STRUCT_IF_C I_BFu7s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu7s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 7, 1, "I_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 7, hide_ull(1LL<<6), "I_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu7s_BFu0s, I_BFu7s_BFu0s)
//============================================================================


struct  I_BFu8c_BFu0c  {
  int v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 I_BFu8c_BFu0c) C1{ Fi Fc:8 Fc:0}



static void Test_I_BFu8c_BFu0c()
{
  {
    init_simple_test("I_BFu8c_BFu0c");
    static STRUCT_IF_C I_BFu8c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8c_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8c_BFu0c, I_BFu8c_BFu0c)
//============================================================================


struct  I_BFu8c_BFu0i  {
  int v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 I_BFu8c_BFu0i) C1{ Fi Fc:8 Fi:0}



static void Test_I_BFu8c_BFu0i()
{
  {
    init_simple_test("I_BFu8c_BFu0i");
    static STRUCT_IF_C I_BFu8c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8c_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8c_BFu0i, I_BFu8c_BFu0i)
//============================================================================


struct  I_BFu8c_BFu0ll  {
  int v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 I_BFu8c_BFu0ll) C1{ Fi Fc:8 FL:0}



static void Test_I_BFu8c_BFu0ll()
{
  {
    init_simple_test("I_BFu8c_BFu0ll");
    static STRUCT_IF_C I_BFu8c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8c_BFu0ll, I_BFu8c_BFu0ll)
//============================================================================


struct  I_BFu8c_BFu0s  {
  int v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 I_BFu8c_BFu0s) C1{ Fi Fc:8 Fs:0}



static void Test_I_BFu8c_BFu0s()
{
  {
    init_simple_test("I_BFu8c_BFu0s");
    static STRUCT_IF_C I_BFu8c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8c_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8c_BFu0s, I_BFu8c_BFu0s)
//============================================================================


struct  I_BFu8i_BFu0c  {
  int v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 I_BFu8i_BFu0c) C1{ Fi Fi:8 Fc:0}



static void Test_I_BFu8i_BFu0c()
{
  {
    init_simple_test("I_BFu8i_BFu0c");
    static STRUCT_IF_C I_BFu8i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8i_BFu0c, I_BFu8i_BFu0c)
//============================================================================


struct  I_BFu8i_BFu0i  {
  int v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 I_BFu8i_BFu0i) C1{ Fi Fi:8 Fi:0}



static void Test_I_BFu8i_BFu0i()
{
  {
    init_simple_test("I_BFu8i_BFu0i");
    static STRUCT_IF_C I_BFu8i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8i_BFu0i, I_BFu8i_BFu0i)
//============================================================================


struct  I_BFu8i_BFu0ll  {
  int v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 I_BFu8i_BFu0ll) C1{ Fi Fi:8 FL:0}



static void Test_I_BFu8i_BFu0ll()
{
  {
    init_simple_test("I_BFu8i_BFu0ll");
    static STRUCT_IF_C I_BFu8i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8i_BFu0ll, I_BFu8i_BFu0ll)
//============================================================================


struct  I_BFu8i_BFu0s  {
  int v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 I_BFu8i_BFu0s) C1{ Fi Fi:8 Fs:0}



static void Test_I_BFu8i_BFu0s()
{
  {
    init_simple_test("I_BFu8i_BFu0s");
    static STRUCT_IF_C I_BFu8i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8i_BFu0s, I_BFu8i_BFu0s)
//============================================================================


struct  I_BFu8ll_BFu0c  {
  int v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 I_BFu8ll_BFu0c) C1{ Fi FL:8 Fc:0}



static void Test_I_BFu8ll_BFu0c()
{
  {
    init_simple_test("I_BFu8ll_BFu0c");
    static STRUCT_IF_C I_BFu8ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8ll_BFu0c, I_BFu8ll_BFu0c)
//============================================================================


struct  I_BFu8ll_BFu0i  {
  int v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 I_BFu8ll_BFu0i) C1{ Fi FL:8 Fi:0}



static void Test_I_BFu8ll_BFu0i()
{
  {
    init_simple_test("I_BFu8ll_BFu0i");
    static STRUCT_IF_C I_BFu8ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8ll_BFu0i, I_BFu8ll_BFu0i)
//============================================================================


struct  I_BFu8ll_BFu0ll  {
  int v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 I_BFu8ll_BFu0ll) C1{ Fi FL:8 FL:0}



static void Test_I_BFu8ll_BFu0ll()
{
  {
    init_simple_test("I_BFu8ll_BFu0ll");
    static STRUCT_IF_C I_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8ll_BFu0ll, I_BFu8ll_BFu0ll)
//============================================================================


struct  I_BFu8ll_BFu0s  {
  int v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 I_BFu8ll_BFu0s) C1{ Fi FL:8 Fs:0}



static void Test_I_BFu8ll_BFu0s()
{
  {
    init_simple_test("I_BFu8ll_BFu0s");
    static STRUCT_IF_C I_BFu8ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8ll_BFu0s, I_BFu8ll_BFu0s)
//============================================================================


struct  I_BFu8s_BFu0c  {
  int v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 I_BFu8s_BFu0c) C1{ Fi Fs:8 Fc:0}



static void Test_I_BFu8s_BFu0c()
{
  {
    init_simple_test("I_BFu8s_BFu0c");
    static STRUCT_IF_C I_BFu8s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8s_BFu0c, I_BFu8s_BFu0c)
//============================================================================


struct  I_BFu8s_BFu0i  {
  int v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 I_BFu8s_BFu0i) C1{ Fi Fs:8 Fi:0}



static void Test_I_BFu8s_BFu0i()
{
  {
    init_simple_test("I_BFu8s_BFu0i");
    static STRUCT_IF_C I_BFu8s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8s_BFu0i, I_BFu8s_BFu0i)
//============================================================================


struct  I_BFu8s_BFu0ll  {
  int v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 I_BFu8s_BFu0ll) C1{ Fi Fs:8 FL:0}



static void Test_I_BFu8s_BFu0ll()
{
  {
    init_simple_test("I_BFu8s_BFu0ll");
    static STRUCT_IF_C I_BFu8s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8s_BFu0ll, I_BFu8s_BFu0ll)
//============================================================================


struct  I_BFu8s_BFu0s  {
  int v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 I_BFu8s_BFu0s) C1{ Fi Fs:8 Fs:0}



static void Test_I_BFu8s_BFu0s()
{
  {
    init_simple_test("I_BFu8s_BFu0s");
    static STRUCT_IF_C I_BFu8s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu8s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 8, 1, "I_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 8, hide_ull(1LL<<7), "I_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu8s_BFu0s, I_BFu8s_BFu0s)
//============================================================================


struct  I_BFu9i_BFu0c  {
  int v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 I_BFu9i_BFu0c) C1{ Fi Fi:9 Fc:0}



static void Test_I_BFu9i_BFu0c()
{
  {
    init_simple_test("I_BFu9i_BFu0c");
    static STRUCT_IF_C I_BFu9i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9i_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9i_BFu0c, I_BFu9i_BFu0c)
//============================================================================


struct  I_BFu9i_BFu0i  {
  int v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 I_BFu9i_BFu0i) C1{ Fi Fi:9 Fi:0}



static void Test_I_BFu9i_BFu0i()
{
  {
    init_simple_test("I_BFu9i_BFu0i");
    static STRUCT_IF_C I_BFu9i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9i_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9i_BFu0i, I_BFu9i_BFu0i)
//============================================================================


struct  I_BFu9i_BFu0ll  {
  int v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 I_BFu9i_BFu0ll) C1{ Fi Fi:9 FL:0}



static void Test_I_BFu9i_BFu0ll()
{
  {
    init_simple_test("I_BFu9i_BFu0ll");
    static STRUCT_IF_C I_BFu9i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9i_BFu0ll, I_BFu9i_BFu0ll)
//============================================================================


struct  I_BFu9i_BFu0s  {
  int v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 I_BFu9i_BFu0s) C1{ Fi Fi:9 Fs:0}



static void Test_I_BFu9i_BFu0s()
{
  {
    init_simple_test("I_BFu9i_BFu0s");
    static STRUCT_IF_C I_BFu9i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9i_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9i_BFu0s, I_BFu9i_BFu0s)
//============================================================================


struct  I_BFu9ll_BFu0c  {
  int v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 I_BFu9ll_BFu0c) C1{ Fi FL:9 Fc:0}



static void Test_I_BFu9ll_BFu0c()
{
  {
    init_simple_test("I_BFu9ll_BFu0c");
    static STRUCT_IF_C I_BFu9ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9ll_BFu0c, I_BFu9ll_BFu0c)
//============================================================================


struct  I_BFu9ll_BFu0i  {
  int v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 I_BFu9ll_BFu0i) C1{ Fi FL:9 Fi:0}



static void Test_I_BFu9ll_BFu0i()
{
  {
    init_simple_test("I_BFu9ll_BFu0i");
    static STRUCT_IF_C I_BFu9ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9ll_BFu0i, I_BFu9ll_BFu0i)
//============================================================================


struct  I_BFu9ll_BFu0ll  {
  int v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 I_BFu9ll_BFu0ll) C1{ Fi FL:9 FL:0}



static void Test_I_BFu9ll_BFu0ll()
{
  {
    init_simple_test("I_BFu9ll_BFu0ll");
    static STRUCT_IF_C I_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9ll_BFu0ll, I_BFu9ll_BFu0ll)
//============================================================================


struct  I_BFu9ll_BFu0s  {
  int v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 I_BFu9ll_BFu0s) C1{ Fi FL:9 Fs:0}



static void Test_I_BFu9ll_BFu0s()
{
  {
    init_simple_test("I_BFu9ll_BFu0s");
    static STRUCT_IF_C I_BFu9ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9ll_BFu0s, I_BFu9ll_BFu0s)
//============================================================================


struct  I_BFu9s_BFu0c  {
  int v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 I_BFu9s_BFu0c) C1{ Fi Fs:9 Fc:0}



static void Test_I_BFu9s_BFu0c()
{
  {
    init_simple_test("I_BFu9s_BFu0c");
    static STRUCT_IF_C I_BFu9s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9s_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "I_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9s_BFu0c, I_BFu9s_BFu0c)
//============================================================================


struct  I_BFu9s_BFu0i  {
  int v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 I_BFu9s_BFu0i) C1{ Fi Fs:9 Fi:0}



static void Test_I_BFu9s_BFu0i()
{
  {
    init_simple_test("I_BFu9s_BFu0i");
    static STRUCT_IF_C I_BFu9s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9s_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "I_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9s_BFu0i, I_BFu9s_BFu0i)
//============================================================================


struct  I_BFu9s_BFu0ll  {
  int v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 I_BFu9s_BFu0ll) C1{ Fi Fs:9 FL:0}



static void Test_I_BFu9s_BFu0ll()
{
  {
    init_simple_test("I_BFu9s_BFu0ll");
    static STRUCT_IF_C I_BFu9s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9s_BFu0ll, I_BFu9s_BFu0ll)
//============================================================================


struct  I_BFu9s_BFu0s  {
  int v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 I_BFu9s_BFu0s) C1{ Fi Fs:9 Fs:0}



static void Test_I_BFu9s_BFu0s()
{
  {
    init_simple_test("I_BFu9s_BFu0s");
    static STRUCT_IF_C I_BFu9s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_BFu9s_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "I_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, 4, 0, 9, 1, "I_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, 4, 0, 9, hide_ull(1LL<<8), "I_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_I_BFu9s_BFu0s, I_BFu9s_BFu0s)
//============================================================================


struct  I_C_BFu0c  {
  int v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 I_C_BFu0c) C1{ Fi Fc Fc:0}



static void Test_I_C_BFu0c()
{
  {
    init_simple_test("I_C_BFu0c");
    static STRUCT_IF_C I_C_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_C_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_C_BFu0c)");
    check_field_offset(lv, v1, 0, "I_C_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_C_BFu0c, I_C_BFu0c)
//============================================================================


struct  I_C_BFu0i  {
  int v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 I_C_BFu0i) C1{ Fi Fc Fi:0}



static void Test_I_C_BFu0i()
{
  {
    init_simple_test("I_C_BFu0i");
    static STRUCT_IF_C I_C_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_C_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_C_BFu0i)");
    check_field_offset(lv, v1, 0, "I_C_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_C_BFu0i, I_C_BFu0i)
//============================================================================


struct  I_C_BFu0ll  {
  int v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 I_C_BFu0ll) C1{ Fi Fc FL:0}



static void Test_I_C_BFu0ll()
{
  {
    init_simple_test("I_C_BFu0ll");
    static STRUCT_IF_C I_C_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_C_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_C_BFu0ll, I_C_BFu0ll)
//============================================================================


struct  I_C_BFu0s  {
  int v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 I_C_BFu0s) C1{ Fi Fc Fs:0}



static void Test_I_C_BFu0s()
{
  {
    init_simple_test("I_C_BFu0s");
    static STRUCT_IF_C I_C_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_C_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_C_BFu0s)");
    check_field_offset(lv, v1, 0, "I_C_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_C_BFu0s, I_C_BFu0s)
//============================================================================


struct  I_D_BFu0c  {
  int v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 I_D_BFu0c) C1{ Fi FL Fc:0}



static void Test_I_D_BFu0c()
{
  {
    init_simple_test("I_D_BFu0c");
    static STRUCT_IF_C I_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_D_BFu0c)");
    check_field_offset(lv, v1, 0, "I_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_D_BFu0c, I_D_BFu0c)
//============================================================================


struct  I_D_BFu0i  {
  int v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 I_D_BFu0i) C1{ Fi FL Fi:0}



static void Test_I_D_BFu0i()
{
  {
    init_simple_test("I_D_BFu0i");
    static STRUCT_IF_C I_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_D_BFu0i)");
    check_field_offset(lv, v1, 0, "I_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_D_BFu0i, I_D_BFu0i)
//============================================================================


struct  I_D_BFu0ll  {
  int v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 I_D_BFu0ll) C1{ Fi FL FL:0}



static void Test_I_D_BFu0ll()
{
  {
    init_simple_test("I_D_BFu0ll");
    static STRUCT_IF_C I_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_D_BFu0ll, I_D_BFu0ll)
//============================================================================


struct  I_D_BFu0s  {
  int v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 I_D_BFu0s) C1{ Fi FL Fs:0}



static void Test_I_D_BFu0s()
{
  {
    init_simple_test("I_D_BFu0s");
    static STRUCT_IF_C I_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_D_BFu0s)");
    check_field_offset(lv, v1, 0, "I_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_D_BFu0s, I_D_BFu0s)
//============================================================================


struct  I_F_BFu0c  {
  int v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 I_F_BFu0c) C1{ Fi[2] Fc:0}



static void Test_I_F_BFu0c()
{
  {
    init_simple_test("I_F_BFu0c");
    static STRUCT_IF_C I_F_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_F_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_F_BFu0c)");
    check_field_offset(lv, v1, 0, "I_F_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_F_BFu0c, I_F_BFu0c)
//============================================================================


struct  I_F_BFu0i  {
  int v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 I_F_BFu0i) C1{ Fi[2] Fi:0}



static void Test_I_F_BFu0i()
{
  {
    init_simple_test("I_F_BFu0i");
    static STRUCT_IF_C I_F_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_F_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_F_BFu0i)");
    check_field_offset(lv, v1, 0, "I_F_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_F_BFu0i, I_F_BFu0i)
//============================================================================


struct  I_F_BFu0ll  {
  int v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 I_F_BFu0ll) C1{ Fi[2] FL:0}



static void Test_I_F_BFu0ll()
{
  {
    init_simple_test("I_F_BFu0ll");
    static STRUCT_IF_C I_F_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_F_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_F_BFu0ll, I_F_BFu0ll)
//============================================================================


struct  I_F_BFu0s  {
  int v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 I_F_BFu0s) C1{ Fi[2] Fs:0}



static void Test_I_F_BFu0s()
{
  {
    init_simple_test("I_F_BFu0s");
    static STRUCT_IF_C I_F_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_F_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_F_BFu0s)");
    check_field_offset(lv, v1, 0, "I_F_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_F_BFu0s, I_F_BFu0s)
//============================================================================


struct  I_I_BFu0c  {
  int v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 I_I_BFu0c) C1{ Fi[2] Fc:0}



static void Test_I_I_BFu0c()
{
  {
    init_simple_test("I_I_BFu0c");
    static STRUCT_IF_C I_I_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_I_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_I_BFu0c)");
    check_field_offset(lv, v1, 0, "I_I_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_I_BFu0c, I_I_BFu0c)
//============================================================================


struct  I_I_BFu0i  {
  int v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 I_I_BFu0i) C1{ Fi[2] Fi:0}



static void Test_I_I_BFu0i()
{
  {
    init_simple_test("I_I_BFu0i");
    static STRUCT_IF_C I_I_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_I_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_I_BFu0i)");
    check_field_offset(lv, v1, 0, "I_I_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_I_BFu0i, I_I_BFu0i)
//============================================================================


struct  I_I_BFu0ll  {
  int v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 I_I_BFu0ll) C1{ Fi[2] FL:0}



static void Test_I_I_BFu0ll()
{
  {
    init_simple_test("I_I_BFu0ll");
    static STRUCT_IF_C I_I_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_I_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_I_BFu0ll, I_I_BFu0ll)
//============================================================================


struct  I_I_BFu0s  {
  int v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 I_I_BFu0s) C1{ Fi[2] Fs:0}



static void Test_I_I_BFu0s()
{
  {
    init_simple_test("I_I_BFu0s");
    static STRUCT_IF_C I_I_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_I_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_I_BFu0s)");
    check_field_offset(lv, v1, 0, "I_I_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_I_BFu0s, I_I_BFu0s)
//============================================================================


struct  I_Ip_BFu0c  {
  int v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 I_Ip_BFu0c) C1{ Fi Fp Fc:0}



static void Test_I_Ip_BFu0c()
{
  {
    init_simple_test("I_Ip_BFu0c");
    static STRUCT_IF_C I_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "I_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ip_BFu0c, I_Ip_BFu0c)
//============================================================================


struct  I_Ip_BFu0i  {
  int v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 I_Ip_BFu0i) C1{ Fi Fp Fi:0}



static void Test_I_Ip_BFu0i()
{
  {
    init_simple_test("I_Ip_BFu0i");
    static STRUCT_IF_C I_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "I_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ip_BFu0i, I_Ip_BFu0i)
//============================================================================


struct  I_Ip_BFu0ll  {
  int v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 I_Ip_BFu0ll) C1{ Fi Fp FL:0}



static void Test_I_Ip_BFu0ll()
{
  {
    init_simple_test("I_Ip_BFu0ll");
    static STRUCT_IF_C I_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ip_BFu0ll, I_Ip_BFu0ll)
//============================================================================


struct  I_Ip_BFu0s  {
  int v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 I_Ip_BFu0s) C1{ Fi Fp Fs:0}



static void Test_I_Ip_BFu0s()
{
  {
    init_simple_test("I_Ip_BFu0s");
    static STRUCT_IF_C I_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "I_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ip_BFu0s, I_Ip_BFu0s)
//============================================================================


struct  I_L_BFu0c  {
  int v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 I_L_BFu0c) C1{ Fi FL Fc:0}



static void Test_I_L_BFu0c()
{
  {
    init_simple_test("I_L_BFu0c");
    static STRUCT_IF_C I_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_L_BFu0c)");
    check_field_offset(lv, v1, 0, "I_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_L_BFu0c, I_L_BFu0c)
//============================================================================


struct  I_L_BFu0i  {
  int v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 I_L_BFu0i) C1{ Fi FL Fi:0}



static void Test_I_L_BFu0i()
{
  {
    init_simple_test("I_L_BFu0i");
    static STRUCT_IF_C I_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_L_BFu0i)");
    check_field_offset(lv, v1, 0, "I_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_L_BFu0i, I_L_BFu0i)
//============================================================================


struct  I_L_BFu0ll  {
  int v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 I_L_BFu0ll) C1{ Fi FL FL:0}



static void Test_I_L_BFu0ll()
{
  {
    init_simple_test("I_L_BFu0ll");
    static STRUCT_IF_C I_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_L_BFu0ll, I_L_BFu0ll)
//============================================================================


struct  I_L_BFu0s  {
  int v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 I_L_BFu0s) C1{ Fi FL Fs:0}



static void Test_I_L_BFu0s()
{
  {
    init_simple_test("I_L_BFu0s");
    static STRUCT_IF_C I_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_L_BFu0s)");
    check_field_offset(lv, v1, 0, "I_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_L_BFu0s, I_L_BFu0s)
//============================================================================


struct  I_S_BFu0c  {
  int v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 I_S_BFu0c) C1{ Fi Fs Fc:0}



static void Test_I_S_BFu0c()
{
  {
    init_simple_test("I_S_BFu0c");
    static STRUCT_IF_C I_S_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_S_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_S_BFu0c)");
    check_field_offset(lv, v1, 0, "I_S_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_S_BFu0c, I_S_BFu0c)
//============================================================================


struct  I_S_BFu0i  {
  int v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 I_S_BFu0i) C1{ Fi Fs Fi:0}



static void Test_I_S_BFu0i()
{
  {
    init_simple_test("I_S_BFu0i");
    static STRUCT_IF_C I_S_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_S_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_S_BFu0i)");
    check_field_offset(lv, v1, 0, "I_S_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_S_BFu0i, I_S_BFu0i)
//============================================================================


struct  I_S_BFu0ll  {
  int v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 I_S_BFu0ll) C1{ Fi Fs FL:0}



static void Test_I_S_BFu0ll()
{
  {
    init_simple_test("I_S_BFu0ll");
    static STRUCT_IF_C I_S_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_S_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_S_BFu0ll, I_S_BFu0ll)
//============================================================================


struct  I_S_BFu0s  {
  int v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 I_S_BFu0s) C1{ Fi Fs Fs:0}



static void Test_I_S_BFu0s()
{
  {
    init_simple_test("I_S_BFu0s");
    static STRUCT_IF_C I_S_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_S_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_S_BFu0s)");
    check_field_offset(lv, v1, 0, "I_S_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_S_BFu0s, I_S_BFu0s)
//============================================================================


struct  I_Uc_BFu0c  {
  int v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 I_Uc_BFu0c) C1{ Fi Fc Fc:0}



static void Test_I_Uc_BFu0c()
{
  {
    init_simple_test("I_Uc_BFu0c");
    static STRUCT_IF_C I_Uc_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_Uc_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "I_Uc_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Uc_BFu0c, I_Uc_BFu0c)
//============================================================================


struct  I_Uc_BFu0i  {
  int v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 I_Uc_BFu0i) C1{ Fi Fc Fi:0}



static void Test_I_Uc_BFu0i()
{
  {
    init_simple_test("I_Uc_BFu0i");
    static STRUCT_IF_C I_Uc_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_Uc_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "I_Uc_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Uc_BFu0i, I_Uc_BFu0i)
//============================================================================


struct  I_Uc_BFu0ll  {
  int v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 I_Uc_BFu0ll) C1{ Fi Fc FL:0}



static void Test_I_Uc_BFu0ll()
{
  {
    init_simple_test("I_Uc_BFu0ll");
    static STRUCT_IF_C I_Uc_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Uc_BFu0ll, I_Uc_BFu0ll)
//============================================================================


struct  I_Uc_BFu0s  {
  int v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 I_Uc_BFu0s) C1{ Fi Fc Fs:0}



static void Test_I_Uc_BFu0s()
{
  {
    init_simple_test("I_Uc_BFu0s");
    static STRUCT_IF_C I_Uc_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_Uc_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "I_Uc_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Uc_BFu0s, I_Uc_BFu0s)
//============================================================================


struct  I_Ui_BFu0c  {
  int v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 I_Ui_BFu0c) C1{ Fi[2] Fc:0}



static void Test_I_Ui_BFu0c()
{
  {
    init_simple_test("I_Ui_BFu0c");
    static STRUCT_IF_C I_Ui_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_Ui_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "I_Ui_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ui_BFu0c, I_Ui_BFu0c)
//============================================================================


struct  I_Ui_BFu0i  {
  int v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 I_Ui_BFu0i) C1{ Fi[2] Fi:0}



static void Test_I_Ui_BFu0i()
{
  {
    init_simple_test("I_Ui_BFu0i");
    static STRUCT_IF_C I_Ui_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_Ui_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "I_Ui_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ui_BFu0i, I_Ui_BFu0i)
//============================================================================


struct  I_Ui_BFu0ll  {
  int v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 I_Ui_BFu0ll) C1{ Fi[2] FL:0}



static void Test_I_Ui_BFu0ll()
{
  {
    init_simple_test("I_Ui_BFu0ll");
    static STRUCT_IF_C I_Ui_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ui_BFu0ll, I_Ui_BFu0ll)
//============================================================================


struct  I_Ui_BFu0s  {
  int v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 I_Ui_BFu0s) C1{ Fi[2] Fs:0}



static void Test_I_Ui_BFu0s()
{
  {
    init_simple_test("I_Ui_BFu0s");
    static STRUCT_IF_C I_Ui_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_Ui_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "I_Ui_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ui_BFu0s, I_Ui_BFu0s)
//============================================================================


struct  I_Ul_BFu0c  {
  int v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 I_Ul_BFu0c) C1{ Fi FL Fc:0}



static void Test_I_Ul_BFu0c()
{
  {
    init_simple_test("I_Ul_BFu0c");
    static STRUCT_IF_C I_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "I_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ul_BFu0c, I_Ul_BFu0c)
//============================================================================


struct  I_Ul_BFu0i  {
  int v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 I_Ul_BFu0i) C1{ Fi FL Fi:0}



static void Test_I_Ul_BFu0i()
{
  {
    init_simple_test("I_Ul_BFu0i");
    static STRUCT_IF_C I_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "I_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ul_BFu0i, I_Ul_BFu0i)
//============================================================================


struct  I_Ul_BFu0ll  {
  int v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 I_Ul_BFu0ll) C1{ Fi FL FL:0}



static void Test_I_Ul_BFu0ll()
{
  {
    init_simple_test("I_Ul_BFu0ll");
    static STRUCT_IF_C I_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ul_BFu0ll, I_Ul_BFu0ll)
//============================================================================


struct  I_Ul_BFu0s  {
  int v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 I_Ul_BFu0s) C1{ Fi FL Fs:0}



static void Test_I_Ul_BFu0s()
{
  {
    init_simple_test("I_Ul_BFu0s");
    static STRUCT_IF_C I_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(I_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "I_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Ul_BFu0s, I_Ul_BFu0s)
//============================================================================


struct  I_Us_BFu0c  {
  int v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 I_Us_BFu0c) C1{ Fi Fs Fc:0}



static void Test_I_Us_BFu0c()
{
  {
    init_simple_test("I_Us_BFu0c");
    static STRUCT_IF_C I_Us_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(I_Us_BFu0c)");
    check2(__alignof__(lv), 4, "__alignof__(I_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "I_Us_BFu0c.v1");
    check_field_offset(lv, v2, 4, "I_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Us_BFu0c, I_Us_BFu0c)
//============================================================================


struct  I_Us_BFu0i  {
  int v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 I_Us_BFu0i) C1{ Fi Fs Fi:0}



static void Test_I_Us_BFu0i()
{
  {
    init_simple_test("I_Us_BFu0i");
    static STRUCT_IF_C I_Us_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(I_Us_BFu0i)");
    check2(__alignof__(lv), 4, "__alignof__(I_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "I_Us_BFu0i.v1");
    check_field_offset(lv, v2, 4, "I_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Us_BFu0i, I_Us_BFu0i)
//============================================================================


struct  I_Us_BFu0ll  {
  int v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 I_Us_BFu0ll) C1{ Fi Fs FL:0}



static void Test_I_Us_BFu0ll()
{
  {
    init_simple_test("I_Us_BFu0ll");
    static STRUCT_IF_C I_Us_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(I_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(4,4), "__alignof__(I_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_Us_BFu0ll.v1");
    check_field_offset(lv, v2, 4, "I_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Us_BFu0ll, I_Us_BFu0ll)
//============================================================================


struct  I_Us_BFu0s  {
  int v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 I_Us_BFu0s) C1{ Fi Fs Fs:0}



static void Test_I_Us_BFu0s()
{
  {
    init_simple_test("I_Us_BFu0s");
    static STRUCT_IF_C I_Us_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(I_Us_BFu0s)");
    check2(__alignof__(lv), 4, "__alignof__(I_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "I_Us_BFu0s.v1");
    check_field_offset(lv, v2, 4, "I_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Us_BFu0s, I_Us_BFu0s)
//============================================================================


struct  I_Vp_BFu0c  {
  int v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 I_Vp_BFu0c) C1{ Fi Fp Fc:0}



static void Test_I_Vp_BFu0c()
{
  {
    init_simple_test("I_Vp_BFu0c");
    static STRUCT_IF_C I_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "I_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Vp_BFu0c, I_Vp_BFu0c)
//============================================================================


struct  I_Vp_BFu0i  {
  int v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 I_Vp_BFu0i) C1{ Fi Fp Fi:0}



static void Test_I_Vp_BFu0i()
{
  {
    init_simple_test("I_Vp_BFu0i");
    static STRUCT_IF_C I_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "I_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Vp_BFu0i, I_Vp_BFu0i)
//============================================================================


struct  I_Vp_BFu0ll  {
  int v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 I_Vp_BFu0ll) C1{ Fi Fp FL:0}



static void Test_I_Vp_BFu0ll()
{
  {
    init_simple_test("I_Vp_BFu0ll");
    static STRUCT_IF_C I_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "I_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Vp_BFu0ll, I_Vp_BFu0ll)
//============================================================================


struct  I_Vp_BFu0s  {
  int v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 I_Vp_BFu0s) C1{ Fi Fp Fs:0}



static void Test_I_Vp_BFu0s()
{
  {
    init_simple_test("I_Vp_BFu0s");
    static STRUCT_IF_C I_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(I_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(I_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "I_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "I_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_I_Vp_BFu0s, I_Vp_BFu0s)
//============================================================================


struct  Ip_BFu0c  {
  int *v1;
  unsigned char  :0;
};
//SIG(1 Ip_BFu0c) C1{ Fp Fc:0}



static void Test_Ip_BFu0c()
{
  {
    init_simple_test("Ip_BFu0c");
    static STRUCT_IF_C Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c, Ip_BFu0c)
//============================================================================


struct  Ip_BFu0c_BFu0c  {
  int *v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 Ip_BFu0c_BFu0c) C1{ Fp Fc:0 Fc:0}



static void Test_Ip_BFu0c_BFu0c()
{
  {
    init_simple_test("Ip_BFu0c_BFu0c");
    static STRUCT_IF_C Ip_BFu0c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu0c, Ip_BFu0c_BFu0c)
//============================================================================


struct  Ip_BFu0c_BFu0i  {
  int *v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 Ip_BFu0c_BFu0i) C1{ Fp Fc:0 Fi:0}



static void Test_Ip_BFu0c_BFu0i()
{
  {
    init_simple_test("Ip_BFu0c_BFu0i");
    static STRUCT_IF_C Ip_BFu0c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu0i, Ip_BFu0c_BFu0i)
//============================================================================


struct  Ip_BFu0c_BFu0ll  {
  int *v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 Ip_BFu0c_BFu0ll) C1{ Fp Fc:0 FL:0}



static void Test_Ip_BFu0c_BFu0ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu0ll");
    static STRUCT_IF_C Ip_BFu0c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu0ll, Ip_BFu0c_BFu0ll)
//============================================================================


struct  Ip_BFu0c_BFu0s  {
  int *v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 Ip_BFu0c_BFu0s) C1{ Fp Fc:0 Fs:0}



static void Test_Ip_BFu0c_BFu0s()
{
  {
    init_simple_test("Ip_BFu0c_BFu0s");
    static STRUCT_IF_C Ip_BFu0c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu0s, Ip_BFu0c_BFu0s)
//============================================================================


struct  Ip_BFu0c_BFu15i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 Ip_BFu0c_BFu15i) C1{ Fp Fc:0 Fi:15}



static void Test_Ip_BFu0c_BFu15i()
{
  {
    init_simple_test("Ip_BFu0c_BFu15i");
    static STRUCT_IF_C Ip_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu15i, Ip_BFu0c_BFu15i)
//============================================================================


struct  Ip_BFu0c_BFu15ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 Ip_BFu0c_BFu15ll) C1{ Fp Fc:0 FL:15}



static void Test_Ip_BFu0c_BFu15ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu15ll");
    static STRUCT_IF_C Ip_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu15ll, Ip_BFu0c_BFu15ll)
//============================================================================


struct  Ip_BFu0c_BFu15s  {
  int *v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 Ip_BFu0c_BFu15s) C1{ Fp Fc:0 Fs:15}



static void Test_Ip_BFu0c_BFu15s()
{
  {
    init_simple_test("Ip_BFu0c_BFu15s");
    static STRUCT_IF_C Ip_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu15s, Ip_BFu0c_BFu15s)
//============================================================================


struct  Ip_BFu0c_BFu16i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 Ip_BFu0c_BFu16i) C1{ Fp Fc:0 Fi:16}



static void Test_Ip_BFu0c_BFu16i()
{
  {
    init_simple_test("Ip_BFu0c_BFu16i");
    static STRUCT_IF_C Ip_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu16i, Ip_BFu0c_BFu16i)
//============================================================================


struct  Ip_BFu0c_BFu16ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 Ip_BFu0c_BFu16ll) C1{ Fp Fc:0 FL:16}



static void Test_Ip_BFu0c_BFu16ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu16ll");
    static STRUCT_IF_C Ip_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu16ll, Ip_BFu0c_BFu16ll)
//============================================================================


struct  Ip_BFu0c_BFu16s  {
  int *v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 Ip_BFu0c_BFu16s) C1{ Fp Fc:0 Fs:16}



static void Test_Ip_BFu0c_BFu16s()
{
  {
    init_simple_test("Ip_BFu0c_BFu16s");
    static STRUCT_IF_C Ip_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu16s, Ip_BFu0c_BFu16s)
//============================================================================


struct  Ip_BFu0c_BFu17i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 Ip_BFu0c_BFu17i) C1{ Fp Fc:0 Fi:17}



static void Test_Ip_BFu0c_BFu17i()
{
  {
    init_simple_test("Ip_BFu0c_BFu17i");
    static STRUCT_IF_C Ip_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu17i, Ip_BFu0c_BFu17i)
//============================================================================


struct  Ip_BFu0c_BFu17ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 Ip_BFu0c_BFu17ll) C1{ Fp Fc:0 FL:17}



static void Test_Ip_BFu0c_BFu17ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu17ll");
    static STRUCT_IF_C Ip_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu17ll, Ip_BFu0c_BFu17ll)
//============================================================================


struct  Ip_BFu0c_BFu1c  {
  int *v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 Ip_BFu0c_BFu1c) C1{ Fp Fc:0 Fc:1}



static void Test_Ip_BFu0c_BFu1c()
{
  {
    init_simple_test("Ip_BFu0c_BFu1c");
    static STRUCT_IF_C Ip_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu1c, Ip_BFu0c_BFu1c)
//============================================================================


struct  Ip_BFu0c_BFu1i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 Ip_BFu0c_BFu1i) C1{ Fp Fc:0 Fi:1}



static void Test_Ip_BFu0c_BFu1i()
{
  {
    init_simple_test("Ip_BFu0c_BFu1i");
    static STRUCT_IF_C Ip_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu1i, Ip_BFu0c_BFu1i)
//============================================================================


struct  Ip_BFu0c_BFu1ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 Ip_BFu0c_BFu1ll) C1{ Fp Fc:0 FL:1}



static void Test_Ip_BFu0c_BFu1ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu1ll");
    static STRUCT_IF_C Ip_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu1ll, Ip_BFu0c_BFu1ll)
//============================================================================


struct  Ip_BFu0c_BFu1s  {
  int *v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 Ip_BFu0c_BFu1s) C1{ Fp Fc:0 Fs:1}



static void Test_Ip_BFu0c_BFu1s()
{
  {
    init_simple_test("Ip_BFu0c_BFu1s");
    static STRUCT_IF_C Ip_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu1s, Ip_BFu0c_BFu1s)
//============================================================================


struct  Ip_BFu0c_BFu31i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 Ip_BFu0c_BFu31i) C1{ Fp Fc:0 Fi:31}



static void Test_Ip_BFu0c_BFu31i()
{
  {
    init_simple_test("Ip_BFu0c_BFu31i");
    static STRUCT_IF_C Ip_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu31i, Ip_BFu0c_BFu31i)
//============================================================================


struct  Ip_BFu0c_BFu31ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 Ip_BFu0c_BFu31ll) C1{ Fp Fc:0 FL:31}



static void Test_Ip_BFu0c_BFu31ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu31ll");
    static STRUCT_IF_C Ip_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu31ll, Ip_BFu0c_BFu31ll)
//============================================================================


struct  Ip_BFu0c_BFu32i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 Ip_BFu0c_BFu32i) C1{ Fp Fc:0 Fi:32}



static void Test_Ip_BFu0c_BFu32i()
{
  {
    init_simple_test("Ip_BFu0c_BFu32i");
    static STRUCT_IF_C Ip_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu32i, Ip_BFu0c_BFu32i)
//============================================================================


struct  Ip_BFu0c_BFu32ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 Ip_BFu0c_BFu32ll) C1{ Fp Fc:0 FL:32}



static void Test_Ip_BFu0c_BFu32ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu32ll");
    static STRUCT_IF_C Ip_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu32ll, Ip_BFu0c_BFu32ll)
//============================================================================


struct  Ip_BFu0c_BFu33  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 Ip_BFu0c_BFu33) C1{ Fp Fc:0 FL:33}



static void Test_Ip_BFu0c_BFu33()
{
  {
    init_simple_test("Ip_BFu0c_BFu33");
    static STRUCT_IF_C Ip_BFu0c_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu0c_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu33, Ip_BFu0c_BFu33)
//============================================================================


struct  Ip_BFu0c_BFu7c  {
  int *v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 Ip_BFu0c_BFu7c) C1{ Fp Fc:0 Fc:7}



static void Test_Ip_BFu0c_BFu7c()
{
  {
    init_simple_test("Ip_BFu0c_BFu7c");
    static STRUCT_IF_C Ip_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu7c, Ip_BFu0c_BFu7c)
//============================================================================


struct  Ip_BFu0c_BFu7i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 Ip_BFu0c_BFu7i) C1{ Fp Fc:0 Fi:7}



static void Test_Ip_BFu0c_BFu7i()
{
  {
    init_simple_test("Ip_BFu0c_BFu7i");
    static STRUCT_IF_C Ip_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu7i, Ip_BFu0c_BFu7i)
//============================================================================


struct  Ip_BFu0c_BFu7ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 Ip_BFu0c_BFu7ll) C1{ Fp Fc:0 FL:7}



static void Test_Ip_BFu0c_BFu7ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu7ll");
    static STRUCT_IF_C Ip_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu7ll, Ip_BFu0c_BFu7ll)
//============================================================================


struct  Ip_BFu0c_BFu7s  {
  int *v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 Ip_BFu0c_BFu7s) C1{ Fp Fc:0 Fs:7}



static void Test_Ip_BFu0c_BFu7s()
{
  {
    init_simple_test("Ip_BFu0c_BFu7s");
    static STRUCT_IF_C Ip_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu7s, Ip_BFu0c_BFu7s)
//============================================================================


struct  Ip_BFu0c_BFu8c  {
  int *v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 Ip_BFu0c_BFu8c) C1{ Fp Fc:0 Fc:8}



static void Test_Ip_BFu0c_BFu8c()
{
  {
    init_simple_test("Ip_BFu0c_BFu8c");
    static STRUCT_IF_C Ip_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu8c, Ip_BFu0c_BFu8c)
//============================================================================


struct  Ip_BFu0c_BFu8i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 Ip_BFu0c_BFu8i) C1{ Fp Fc:0 Fi:8}



static void Test_Ip_BFu0c_BFu8i()
{
  {
    init_simple_test("Ip_BFu0c_BFu8i");
    static STRUCT_IF_C Ip_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu8i, Ip_BFu0c_BFu8i)
//============================================================================


struct  Ip_BFu0c_BFu8ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 Ip_BFu0c_BFu8ll) C1{ Fp Fc:0 FL:8}



static void Test_Ip_BFu0c_BFu8ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu8ll");
    static STRUCT_IF_C Ip_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu8ll, Ip_BFu0c_BFu8ll)
//============================================================================


struct  Ip_BFu0c_BFu8s  {
  int *v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 Ip_BFu0c_BFu8s) C1{ Fp Fc:0 Fs:8}



static void Test_Ip_BFu0c_BFu8s()
{
  {
    init_simple_test("Ip_BFu0c_BFu8s");
    static STRUCT_IF_C Ip_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu8s, Ip_BFu0c_BFu8s)
//============================================================================


struct  Ip_BFu0c_BFu9i  {
  int *v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 Ip_BFu0c_BFu9i) C1{ Fp Fc:0 Fi:9}



static void Test_Ip_BFu0c_BFu9i()
{
  {
    init_simple_test("Ip_BFu0c_BFu9i");
    static STRUCT_IF_C Ip_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu9i, Ip_BFu0c_BFu9i)
//============================================================================


struct  Ip_BFu0c_BFu9ll  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 Ip_BFu0c_BFu9ll) C1{ Fp Fc:0 FL:9}



static void Test_Ip_BFu0c_BFu9ll()
{
  {
    init_simple_test("Ip_BFu0c_BFu9ll");
    static STRUCT_IF_C Ip_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu9ll, Ip_BFu0c_BFu9ll)
//============================================================================


struct  Ip_BFu0c_BFu9s  {
  int *v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 Ip_BFu0c_BFu9s) C1{ Fp Fc:0 Fs:9}



static void Test_Ip_BFu0c_BFu9s()
{
  {
    init_simple_test("Ip_BFu0c_BFu9s");
    static STRUCT_IF_C Ip_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_BFu9s, Ip_BFu0c_BFu9s)
//============================================================================


struct  Ip_BFu0c_C  {
  int *v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 Ip_BFu0c_C) C1{ Fp Fc:0 Fc}



static void Test_Ip_BFu0c_C()
{
  {
    init_simple_test("Ip_BFu0c_C");
    static STRUCT_IF_C Ip_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_C, Ip_BFu0c_C)
//============================================================================


struct  Ip_BFu0c_D  {
  int *v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 Ip_BFu0c_D) C1{ Fp Fc:0 FL}



static void Test_Ip_BFu0c_D()
{
  {
    init_simple_test("Ip_BFu0c_D");
    static STRUCT_IF_C Ip_BFu0c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_D, Ip_BFu0c_D)
//============================================================================


struct  Ip_BFu0c_F  {
  int *v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 Ip_BFu0c_F) C1{ Fp Fc:0 Fi}



static void Test_Ip_BFu0c_F()
{
  {
    init_simple_test("Ip_BFu0c_F");
    static STRUCT_IF_C Ip_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_F, Ip_BFu0c_F)
//============================================================================


struct  Ip_BFu0c_I  {
  int *v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 Ip_BFu0c_I) C1{ Fp Fc:0 Fi}



static void Test_Ip_BFu0c_I()
{
  {
    init_simple_test("Ip_BFu0c_I");
    static STRUCT_IF_C Ip_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_I, Ip_BFu0c_I)
//============================================================================


struct  Ip_BFu0c_Ip  {
  int *v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 Ip_BFu0c_Ip) C1{ Fp Fc:0 Fp}



static void Test_Ip_BFu0c_Ip()
{
  {
    init_simple_test("Ip_BFu0c_Ip");
    static STRUCT_IF_C Ip_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_Ip, Ip_BFu0c_Ip)
//============================================================================


struct  Ip_BFu0c_L  {
  int *v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 Ip_BFu0c_L) C1{ Fp Fc:0 FL}



static void Test_Ip_BFu0c_L()
{
  {
    init_simple_test("Ip_BFu0c_L");
    static STRUCT_IF_C Ip_BFu0c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_L, Ip_BFu0c_L)
//============================================================================


struct  Ip_BFu0c_S  {
  int *v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 Ip_BFu0c_S) C1{ Fp Fc:0 Fs}



static void Test_Ip_BFu0c_S()
{
  {
    init_simple_test("Ip_BFu0c_S");
    static STRUCT_IF_C Ip_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_S, Ip_BFu0c_S)
//============================================================================


struct  Ip_BFu0c_Uc  {
  int *v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 Ip_BFu0c_Uc) C1{ Fp Fc:0 Fc}



static void Test_Ip_BFu0c_Uc()
{
  {
    init_simple_test("Ip_BFu0c_Uc");
    static STRUCT_IF_C Ip_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_Uc, Ip_BFu0c_Uc)
//============================================================================


struct  Ip_BFu0c_Ui  {
  int *v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 Ip_BFu0c_Ui) C1{ Fp Fc:0 Fi}



static void Test_Ip_BFu0c_Ui()
{
  {
    init_simple_test("Ip_BFu0c_Ui");
    static STRUCT_IF_C Ip_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_Ui, Ip_BFu0c_Ui)
//============================================================================


struct  Ip_BFu0c_Ul  {
  int *v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 Ip_BFu0c_Ul) C1{ Fp Fc:0 FL}



static void Test_Ip_BFu0c_Ul()
{
  {
    init_simple_test("Ip_BFu0c_Ul");
    static STRUCT_IF_C Ip_BFu0c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_Ul, Ip_BFu0c_Ul)
//============================================================================


struct  Ip_BFu0c_Us  {
  int *v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 Ip_BFu0c_Us) C1{ Fp Fc:0 Fs}



static void Test_Ip_BFu0c_Us()
{
  {
    init_simple_test("Ip_BFu0c_Us");
    static STRUCT_IF_C Ip_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_Us, Ip_BFu0c_Us)
//============================================================================


struct  Ip_BFu0c_Vp  {
  int *v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 Ip_BFu0c_Vp) C1{ Fp Fc:0 Fp}



static void Test_Ip_BFu0c_Vp()
{
  {
    init_simple_test("Ip_BFu0c_Vp");
    static STRUCT_IF_C Ip_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu0c_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0c_Vp, Ip_BFu0c_Vp)
//============================================================================


struct  Ip_BFu0i  {
  int *v1;
  unsigned int  :0;
};
//SIG(1 Ip_BFu0i) C1{ Fp Fi:0}



static void Test_Ip_BFu0i()
{
  {
    init_simple_test("Ip_BFu0i");
    static STRUCT_IF_C Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i, Ip_BFu0i)
//============================================================================


struct  Ip_BFu0i_BFu0c  {
  int *v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 Ip_BFu0i_BFu0c) C1{ Fp Fi:0 Fc:0}



static void Test_Ip_BFu0i_BFu0c()
{
  {
    init_simple_test("Ip_BFu0i_BFu0c");
    static STRUCT_IF_C Ip_BFu0i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu0c, Ip_BFu0i_BFu0c)
//============================================================================


struct  Ip_BFu0i_BFu0i  {
  int *v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 Ip_BFu0i_BFu0i) C1{ Fp Fi:0 Fi:0}



static void Test_Ip_BFu0i_BFu0i()
{
  {
    init_simple_test("Ip_BFu0i_BFu0i");
    static STRUCT_IF_C Ip_BFu0i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu0i, Ip_BFu0i_BFu0i)
//============================================================================


struct  Ip_BFu0i_BFu0ll  {
  int *v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 Ip_BFu0i_BFu0ll) C1{ Fp Fi:0 FL:0}



static void Test_Ip_BFu0i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu0ll");
    static STRUCT_IF_C Ip_BFu0i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu0ll, Ip_BFu0i_BFu0ll)
//============================================================================


struct  Ip_BFu0i_BFu0s  {
  int *v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 Ip_BFu0i_BFu0s) C1{ Fp Fi:0 Fs:0}



static void Test_Ip_BFu0i_BFu0s()
{
  {
    init_simple_test("Ip_BFu0i_BFu0s");
    static STRUCT_IF_C Ip_BFu0i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu0s, Ip_BFu0i_BFu0s)
//============================================================================


struct  Ip_BFu0i_BFu15i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 Ip_BFu0i_BFu15i) C1{ Fp Fi:0 Fi:15}



static void Test_Ip_BFu0i_BFu15i()
{
  {
    init_simple_test("Ip_BFu0i_BFu15i");
    static STRUCT_IF_C Ip_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu15i, Ip_BFu0i_BFu15i)
//============================================================================


struct  Ip_BFu0i_BFu15ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 Ip_BFu0i_BFu15ll) C1{ Fp Fi:0 FL:15}



static void Test_Ip_BFu0i_BFu15ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu15ll");
    static STRUCT_IF_C Ip_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu15ll, Ip_BFu0i_BFu15ll)
//============================================================================


struct  Ip_BFu0i_BFu15s  {
  int *v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 Ip_BFu0i_BFu15s) C1{ Fp Fi:0 Fs:15}



static void Test_Ip_BFu0i_BFu15s()
{
  {
    init_simple_test("Ip_BFu0i_BFu15s");
    static STRUCT_IF_C Ip_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu15s, Ip_BFu0i_BFu15s)
//============================================================================


struct  Ip_BFu0i_BFu16i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 Ip_BFu0i_BFu16i) C1{ Fp Fi:0 Fi:16}



static void Test_Ip_BFu0i_BFu16i()
{
  {
    init_simple_test("Ip_BFu0i_BFu16i");
    static STRUCT_IF_C Ip_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu16i, Ip_BFu0i_BFu16i)
//============================================================================


struct  Ip_BFu0i_BFu16ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 Ip_BFu0i_BFu16ll) C1{ Fp Fi:0 FL:16}



static void Test_Ip_BFu0i_BFu16ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu16ll");
    static STRUCT_IF_C Ip_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu16ll, Ip_BFu0i_BFu16ll)
//============================================================================


struct  Ip_BFu0i_BFu16s  {
  int *v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 Ip_BFu0i_BFu16s) C1{ Fp Fi:0 Fs:16}



static void Test_Ip_BFu0i_BFu16s()
{
  {
    init_simple_test("Ip_BFu0i_BFu16s");
    static STRUCT_IF_C Ip_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu16s, Ip_BFu0i_BFu16s)
//============================================================================


struct  Ip_BFu0i_BFu17i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 Ip_BFu0i_BFu17i) C1{ Fp Fi:0 Fi:17}



static void Test_Ip_BFu0i_BFu17i()
{
  {
    init_simple_test("Ip_BFu0i_BFu17i");
    static STRUCT_IF_C Ip_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu17i, Ip_BFu0i_BFu17i)
//============================================================================


struct  Ip_BFu0i_BFu17ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 Ip_BFu0i_BFu17ll) C1{ Fp Fi:0 FL:17}



static void Test_Ip_BFu0i_BFu17ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu17ll");
    static STRUCT_IF_C Ip_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu17ll, Ip_BFu0i_BFu17ll)
//============================================================================


struct  Ip_BFu0i_BFu1c  {
  int *v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 Ip_BFu0i_BFu1c) C1{ Fp Fi:0 Fc:1}



static void Test_Ip_BFu0i_BFu1c()
{
  {
    init_simple_test("Ip_BFu0i_BFu1c");
    static STRUCT_IF_C Ip_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu1c, Ip_BFu0i_BFu1c)
//============================================================================


struct  Ip_BFu0i_BFu1i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 Ip_BFu0i_BFu1i) C1{ Fp Fi:0 Fi:1}



static void Test_Ip_BFu0i_BFu1i()
{
  {
    init_simple_test("Ip_BFu0i_BFu1i");
    static STRUCT_IF_C Ip_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu1i, Ip_BFu0i_BFu1i)
//============================================================================


struct  Ip_BFu0i_BFu1ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 Ip_BFu0i_BFu1ll) C1{ Fp Fi:0 FL:1}



static void Test_Ip_BFu0i_BFu1ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu1ll");
    static STRUCT_IF_C Ip_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu1ll, Ip_BFu0i_BFu1ll)
//============================================================================


struct  Ip_BFu0i_BFu1s  {
  int *v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 Ip_BFu0i_BFu1s) C1{ Fp Fi:0 Fs:1}



static void Test_Ip_BFu0i_BFu1s()
{
  {
    init_simple_test("Ip_BFu0i_BFu1s");
    static STRUCT_IF_C Ip_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu1s, Ip_BFu0i_BFu1s)
//============================================================================


struct  Ip_BFu0i_BFu31i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 Ip_BFu0i_BFu31i) C1{ Fp Fi:0 Fi:31}



static void Test_Ip_BFu0i_BFu31i()
{
  {
    init_simple_test("Ip_BFu0i_BFu31i");
    static STRUCT_IF_C Ip_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu31i, Ip_BFu0i_BFu31i)
//============================================================================


struct  Ip_BFu0i_BFu31ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 Ip_BFu0i_BFu31ll) C1{ Fp Fi:0 FL:31}



static void Test_Ip_BFu0i_BFu31ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu31ll");
    static STRUCT_IF_C Ip_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu31ll, Ip_BFu0i_BFu31ll)
//============================================================================


struct  Ip_BFu0i_BFu32i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 Ip_BFu0i_BFu32i) C1{ Fp Fi:0 Fi:32}



static void Test_Ip_BFu0i_BFu32i()
{
  {
    init_simple_test("Ip_BFu0i_BFu32i");
    static STRUCT_IF_C Ip_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu32i, Ip_BFu0i_BFu32i)
//============================================================================


struct  Ip_BFu0i_BFu32ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 Ip_BFu0i_BFu32ll) C1{ Fp Fi:0 FL:32}



static void Test_Ip_BFu0i_BFu32ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu32ll");
    static STRUCT_IF_C Ip_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu32ll, Ip_BFu0i_BFu32ll)
//============================================================================


struct  Ip_BFu0i_BFu33  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 Ip_BFu0i_BFu33) C1{ Fp Fi:0 FL:33}



static void Test_Ip_BFu0i_BFu33()
{
  {
    init_simple_test("Ip_BFu0i_BFu33");
    static STRUCT_IF_C Ip_BFu0i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu0i_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu33, Ip_BFu0i_BFu33)
//============================================================================


struct  Ip_BFu0i_BFu7c  {
  int *v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 Ip_BFu0i_BFu7c) C1{ Fp Fi:0 Fc:7}



static void Test_Ip_BFu0i_BFu7c()
{
  {
    init_simple_test("Ip_BFu0i_BFu7c");
    static STRUCT_IF_C Ip_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu7c, Ip_BFu0i_BFu7c)
//============================================================================


struct  Ip_BFu0i_BFu7i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 Ip_BFu0i_BFu7i) C1{ Fp Fi:0 Fi:7}



static void Test_Ip_BFu0i_BFu7i()
{
  {
    init_simple_test("Ip_BFu0i_BFu7i");
    static STRUCT_IF_C Ip_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu7i, Ip_BFu0i_BFu7i)
//============================================================================


struct  Ip_BFu0i_BFu7ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 Ip_BFu0i_BFu7ll) C1{ Fp Fi:0 FL:7}



static void Test_Ip_BFu0i_BFu7ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu7ll");
    static STRUCT_IF_C Ip_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu7ll, Ip_BFu0i_BFu7ll)
//============================================================================


struct  Ip_BFu0i_BFu7s  {
  int *v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 Ip_BFu0i_BFu7s) C1{ Fp Fi:0 Fs:7}



static void Test_Ip_BFu0i_BFu7s()
{
  {
    init_simple_test("Ip_BFu0i_BFu7s");
    static STRUCT_IF_C Ip_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu7s, Ip_BFu0i_BFu7s)
//============================================================================


struct  Ip_BFu0i_BFu8c  {
  int *v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 Ip_BFu0i_BFu8c) C1{ Fp Fi:0 Fc:8}



static void Test_Ip_BFu0i_BFu8c()
{
  {
    init_simple_test("Ip_BFu0i_BFu8c");
    static STRUCT_IF_C Ip_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu8c, Ip_BFu0i_BFu8c)
//============================================================================


struct  Ip_BFu0i_BFu8i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 Ip_BFu0i_BFu8i) C1{ Fp Fi:0 Fi:8}



static void Test_Ip_BFu0i_BFu8i()
{
  {
    init_simple_test("Ip_BFu0i_BFu8i");
    static STRUCT_IF_C Ip_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu8i, Ip_BFu0i_BFu8i)
//============================================================================


struct  Ip_BFu0i_BFu8ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 Ip_BFu0i_BFu8ll) C1{ Fp Fi:0 FL:8}



static void Test_Ip_BFu0i_BFu8ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu8ll");
    static STRUCT_IF_C Ip_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu8ll, Ip_BFu0i_BFu8ll)
//============================================================================


struct  Ip_BFu0i_BFu8s  {
  int *v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 Ip_BFu0i_BFu8s) C1{ Fp Fi:0 Fs:8}



static void Test_Ip_BFu0i_BFu8s()
{
  {
    init_simple_test("Ip_BFu0i_BFu8s");
    static STRUCT_IF_C Ip_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu8s, Ip_BFu0i_BFu8s)
//============================================================================


struct  Ip_BFu0i_BFu9i  {
  int *v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 Ip_BFu0i_BFu9i) C1{ Fp Fi:0 Fi:9}



static void Test_Ip_BFu0i_BFu9i()
{
  {
    init_simple_test("Ip_BFu0i_BFu9i");
    static STRUCT_IF_C Ip_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu9i, Ip_BFu0i_BFu9i)
//============================================================================


struct  Ip_BFu0i_BFu9ll  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 Ip_BFu0i_BFu9ll) C1{ Fp Fi:0 FL:9}



static void Test_Ip_BFu0i_BFu9ll()
{
  {
    init_simple_test("Ip_BFu0i_BFu9ll");
    static STRUCT_IF_C Ip_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu9ll, Ip_BFu0i_BFu9ll)
//============================================================================


struct  Ip_BFu0i_BFu9s  {
  int *v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 Ip_BFu0i_BFu9s) C1{ Fp Fi:0 Fs:9}



static void Test_Ip_BFu0i_BFu9s()
{
  {
    init_simple_test("Ip_BFu0i_BFu9s");
    static STRUCT_IF_C Ip_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_BFu9s, Ip_BFu0i_BFu9s)
//============================================================================


struct  Ip_BFu0i_C  {
  int *v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 Ip_BFu0i_C) C1{ Fp Fi:0 Fc}



static void Test_Ip_BFu0i_C()
{
  {
    init_simple_test("Ip_BFu0i_C");
    static STRUCT_IF_C Ip_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_C, Ip_BFu0i_C)
//============================================================================


struct  Ip_BFu0i_D  {
  int *v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 Ip_BFu0i_D) C1{ Fp Fi:0 FL}



static void Test_Ip_BFu0i_D()
{
  {
    init_simple_test("Ip_BFu0i_D");
    static STRUCT_IF_C Ip_BFu0i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_D, Ip_BFu0i_D)
//============================================================================


struct  Ip_BFu0i_F  {
  int *v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 Ip_BFu0i_F) C1{ Fp Fi:0 Fi}



static void Test_Ip_BFu0i_F()
{
  {
    init_simple_test("Ip_BFu0i_F");
    static STRUCT_IF_C Ip_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_F, Ip_BFu0i_F)
//============================================================================


struct  Ip_BFu0i_I  {
  int *v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 Ip_BFu0i_I) C1{ Fp Fi:0 Fi}



static void Test_Ip_BFu0i_I()
{
  {
    init_simple_test("Ip_BFu0i_I");
    static STRUCT_IF_C Ip_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_I, Ip_BFu0i_I)
//============================================================================


struct  Ip_BFu0i_Ip  {
  int *v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 Ip_BFu0i_Ip) C1{ Fp Fi:0 Fp}



static void Test_Ip_BFu0i_Ip()
{
  {
    init_simple_test("Ip_BFu0i_Ip");
    static STRUCT_IF_C Ip_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_Ip, Ip_BFu0i_Ip)
//============================================================================


struct  Ip_BFu0i_L  {
  int *v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 Ip_BFu0i_L) C1{ Fp Fi:0 FL}



static void Test_Ip_BFu0i_L()
{
  {
    init_simple_test("Ip_BFu0i_L");
    static STRUCT_IF_C Ip_BFu0i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_L, Ip_BFu0i_L)
//============================================================================


struct  Ip_BFu0i_S  {
  int *v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 Ip_BFu0i_S) C1{ Fp Fi:0 Fs}



static void Test_Ip_BFu0i_S()
{
  {
    init_simple_test("Ip_BFu0i_S");
    static STRUCT_IF_C Ip_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_S, Ip_BFu0i_S)
//============================================================================


struct  Ip_BFu0i_Uc  {
  int *v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 Ip_BFu0i_Uc) C1{ Fp Fi:0 Fc}



static void Test_Ip_BFu0i_Uc()
{
  {
    init_simple_test("Ip_BFu0i_Uc");
    static STRUCT_IF_C Ip_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_Uc, Ip_BFu0i_Uc)
//============================================================================


struct  Ip_BFu0i_Ui  {
  int *v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 Ip_BFu0i_Ui) C1{ Fp Fi:0 Fi}



static void Test_Ip_BFu0i_Ui()
{
  {
    init_simple_test("Ip_BFu0i_Ui");
    static STRUCT_IF_C Ip_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_Ui, Ip_BFu0i_Ui)
//============================================================================


struct  Ip_BFu0i_Ul  {
  int *v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 Ip_BFu0i_Ul) C1{ Fp Fi:0 FL}



static void Test_Ip_BFu0i_Ul()
{
  {
    init_simple_test("Ip_BFu0i_Ul");
    static STRUCT_IF_C Ip_BFu0i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_Ul, Ip_BFu0i_Ul)
//============================================================================


struct  Ip_BFu0i_Us  {
  int *v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 Ip_BFu0i_Us) C1{ Fp Fi:0 Fs}



static void Test_Ip_BFu0i_Us()
{
  {
    init_simple_test("Ip_BFu0i_Us");
    static STRUCT_IF_C Ip_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_Us, Ip_BFu0i_Us)
//============================================================================


struct  Ip_BFu0i_Vp  {
  int *v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 Ip_BFu0i_Vp) C1{ Fp Fi:0 Fp}



static void Test_Ip_BFu0i_Vp()
{
  {
    init_simple_test("Ip_BFu0i_Vp");
    static STRUCT_IF_C Ip_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu0i_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0i_Vp, Ip_BFu0i_Vp)
//============================================================================


struct  Ip_BFu0ll  {
  int *v1;
  __tsu64  :0;
};
//SIG(1 Ip_BFu0ll) C1{ Fp FL:0}



static void Test_Ip_BFu0ll()
{
  {
    init_simple_test("Ip_BFu0ll");
    static STRUCT_IF_C Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll, Ip_BFu0ll)
//============================================================================


struct  Ip_BFu0ll_BFu0c  {
  int *v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 Ip_BFu0ll_BFu0c) C1{ Fp FL:0 Fc:0}



static void Test_Ip_BFu0ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu0ll_BFu0c");
    static STRUCT_IF_C Ip_BFu0ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu0c, Ip_BFu0ll_BFu0c)
//============================================================================


struct  Ip_BFu0ll_BFu0i  {
  int *v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 Ip_BFu0ll_BFu0i) C1{ Fp FL:0 Fi:0}



static void Test_Ip_BFu0ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu0i");
    static STRUCT_IF_C Ip_BFu0ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu0i, Ip_BFu0ll_BFu0i)
//============================================================================


struct  Ip_BFu0ll_BFu0ll  {
  int *v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 Ip_BFu0ll_BFu0ll) C1{ Fp FL:0 FL:0}



static void Test_Ip_BFu0ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu0ll, Ip_BFu0ll_BFu0ll)
//============================================================================


struct  Ip_BFu0ll_BFu0s  {
  int *v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 Ip_BFu0ll_BFu0s) C1{ Fp FL:0 Fs:0}



static void Test_Ip_BFu0ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu0s");
    static STRUCT_IF_C Ip_BFu0ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu0s, Ip_BFu0ll_BFu0s)
//============================================================================


struct  Ip_BFu0ll_BFu15i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 Ip_BFu0ll_BFu15i) C1{ Fp FL:0 Fi:15}



static void Test_Ip_BFu0ll_BFu15i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu15i");
    static STRUCT_IF_C Ip_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu15i, Ip_BFu0ll_BFu15i)
//============================================================================


struct  Ip_BFu0ll_BFu15ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 Ip_BFu0ll_BFu15ll) C1{ Fp FL:0 FL:15}



static void Test_Ip_BFu0ll_BFu15ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu15ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu15ll, Ip_BFu0ll_BFu15ll)
//============================================================================


struct  Ip_BFu0ll_BFu15s  {
  int *v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 Ip_BFu0ll_BFu15s) C1{ Fp FL:0 Fs:15}



static void Test_Ip_BFu0ll_BFu15s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu15s");
    static STRUCT_IF_C Ip_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu15s, Ip_BFu0ll_BFu15s)
//============================================================================


struct  Ip_BFu0ll_BFu16i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 Ip_BFu0ll_BFu16i) C1{ Fp FL:0 Fi:16}



static void Test_Ip_BFu0ll_BFu16i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu16i");
    static STRUCT_IF_C Ip_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu16i, Ip_BFu0ll_BFu16i)
//============================================================================


struct  Ip_BFu0ll_BFu16ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 Ip_BFu0ll_BFu16ll) C1{ Fp FL:0 FL:16}



static void Test_Ip_BFu0ll_BFu16ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu16ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu16ll, Ip_BFu0ll_BFu16ll)
//============================================================================


struct  Ip_BFu0ll_BFu16s  {
  int *v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 Ip_BFu0ll_BFu16s) C1{ Fp FL:0 Fs:16}



static void Test_Ip_BFu0ll_BFu16s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu16s");
    static STRUCT_IF_C Ip_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu16s, Ip_BFu0ll_BFu16s)
//============================================================================


struct  Ip_BFu0ll_BFu17i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 Ip_BFu0ll_BFu17i) C1{ Fp FL:0 Fi:17}



static void Test_Ip_BFu0ll_BFu17i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu17i");
    static STRUCT_IF_C Ip_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu17i, Ip_BFu0ll_BFu17i)
//============================================================================


struct  Ip_BFu0ll_BFu17ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 Ip_BFu0ll_BFu17ll) C1{ Fp FL:0 FL:17}



static void Test_Ip_BFu0ll_BFu17ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu17ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu17ll, Ip_BFu0ll_BFu17ll)
//============================================================================


struct  Ip_BFu0ll_BFu1c  {
  int *v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 Ip_BFu0ll_BFu1c) C1{ Fp FL:0 Fc:1}



static void Test_Ip_BFu0ll_BFu1c()
{
  {
    init_simple_test("Ip_BFu0ll_BFu1c");
    static STRUCT_IF_C Ip_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu1c, Ip_BFu0ll_BFu1c)
//============================================================================


struct  Ip_BFu0ll_BFu1i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 Ip_BFu0ll_BFu1i) C1{ Fp FL:0 Fi:1}



static void Test_Ip_BFu0ll_BFu1i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu1i");
    static STRUCT_IF_C Ip_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu1i, Ip_BFu0ll_BFu1i)
//============================================================================


struct  Ip_BFu0ll_BFu1ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 Ip_BFu0ll_BFu1ll) C1{ Fp FL:0 FL:1}



static void Test_Ip_BFu0ll_BFu1ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu1ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu1ll, Ip_BFu0ll_BFu1ll)
//============================================================================


struct  Ip_BFu0ll_BFu1s  {
  int *v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 Ip_BFu0ll_BFu1s) C1{ Fp FL:0 Fs:1}



static void Test_Ip_BFu0ll_BFu1s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu1s");
    static STRUCT_IF_C Ip_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu1s, Ip_BFu0ll_BFu1s)
//============================================================================


struct  Ip_BFu0ll_BFu31i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 Ip_BFu0ll_BFu31i) C1{ Fp FL:0 Fi:31}



static void Test_Ip_BFu0ll_BFu31i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu31i");
    static STRUCT_IF_C Ip_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu31i, Ip_BFu0ll_BFu31i)
//============================================================================


struct  Ip_BFu0ll_BFu31ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 Ip_BFu0ll_BFu31ll) C1{ Fp FL:0 FL:31}



static void Test_Ip_BFu0ll_BFu31ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu31ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu31ll, Ip_BFu0ll_BFu31ll)
//============================================================================


struct  Ip_BFu0ll_BFu32i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 Ip_BFu0ll_BFu32i) C1{ Fp FL:0 Fi:32}



static void Test_Ip_BFu0ll_BFu32i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu32i");
    static STRUCT_IF_C Ip_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu32i, Ip_BFu0ll_BFu32i)
//============================================================================


struct  Ip_BFu0ll_BFu32ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 Ip_BFu0ll_BFu32ll) C1{ Fp FL:0 FL:32}



static void Test_Ip_BFu0ll_BFu32ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu32ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu32ll, Ip_BFu0ll_BFu32ll)
//============================================================================


struct  Ip_BFu0ll_BFu33  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 Ip_BFu0ll_BFu33) C1{ Fp FL:0 FL:33}



static void Test_Ip_BFu0ll_BFu33()
{
  {
    init_simple_test("Ip_BFu0ll_BFu33");
    static STRUCT_IF_C Ip_BFu0ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu33, Ip_BFu0ll_BFu33)
//============================================================================


struct  Ip_BFu0ll_BFu7c  {
  int *v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 Ip_BFu0ll_BFu7c) C1{ Fp FL:0 Fc:7}



static void Test_Ip_BFu0ll_BFu7c()
{
  {
    init_simple_test("Ip_BFu0ll_BFu7c");
    static STRUCT_IF_C Ip_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu7c, Ip_BFu0ll_BFu7c)
//============================================================================


struct  Ip_BFu0ll_BFu7i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 Ip_BFu0ll_BFu7i) C1{ Fp FL:0 Fi:7}



static void Test_Ip_BFu0ll_BFu7i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu7i");
    static STRUCT_IF_C Ip_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu7i, Ip_BFu0ll_BFu7i)
//============================================================================


struct  Ip_BFu0ll_BFu7ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 Ip_BFu0ll_BFu7ll) C1{ Fp FL:0 FL:7}



static void Test_Ip_BFu0ll_BFu7ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu7ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu7ll, Ip_BFu0ll_BFu7ll)
//============================================================================


struct  Ip_BFu0ll_BFu7s  {
  int *v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 Ip_BFu0ll_BFu7s) C1{ Fp FL:0 Fs:7}



static void Test_Ip_BFu0ll_BFu7s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu7s");
    static STRUCT_IF_C Ip_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu7s, Ip_BFu0ll_BFu7s)
//============================================================================


struct  Ip_BFu0ll_BFu8c  {
  int *v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 Ip_BFu0ll_BFu8c) C1{ Fp FL:0 Fc:8}



static void Test_Ip_BFu0ll_BFu8c()
{
  {
    init_simple_test("Ip_BFu0ll_BFu8c");
    static STRUCT_IF_C Ip_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu8c, Ip_BFu0ll_BFu8c)
//============================================================================


struct  Ip_BFu0ll_BFu8i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 Ip_BFu0ll_BFu8i) C1{ Fp FL:0 Fi:8}



static void Test_Ip_BFu0ll_BFu8i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu8i");
    static STRUCT_IF_C Ip_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu8i, Ip_BFu0ll_BFu8i)
//============================================================================


struct  Ip_BFu0ll_BFu8ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 Ip_BFu0ll_BFu8ll) C1{ Fp FL:0 FL:8}



static void Test_Ip_BFu0ll_BFu8ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu8ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu8ll, Ip_BFu0ll_BFu8ll)
//============================================================================


struct  Ip_BFu0ll_BFu8s  {
  int *v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 Ip_BFu0ll_BFu8s) C1{ Fp FL:0 Fs:8}



static void Test_Ip_BFu0ll_BFu8s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu8s");
    static STRUCT_IF_C Ip_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu8s, Ip_BFu0ll_BFu8s)
//============================================================================


struct  Ip_BFu0ll_BFu9i  {
  int *v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 Ip_BFu0ll_BFu9i) C1{ Fp FL:0 Fi:9}



static void Test_Ip_BFu0ll_BFu9i()
{
  {
    init_simple_test("Ip_BFu0ll_BFu9i");
    static STRUCT_IF_C Ip_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu9i, Ip_BFu0ll_BFu9i)
//============================================================================


struct  Ip_BFu0ll_BFu9ll  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 Ip_BFu0ll_BFu9ll) C1{ Fp FL:0 FL:9}



static void Test_Ip_BFu0ll_BFu9ll()
{
  {
    init_simple_test("Ip_BFu0ll_BFu9ll");
    static STRUCT_IF_C Ip_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu9ll, Ip_BFu0ll_BFu9ll)
//============================================================================


struct  Ip_BFu0ll_BFu9s  {
  int *v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 Ip_BFu0ll_BFu9s) C1{ Fp FL:0 Fs:9}



static void Test_Ip_BFu0ll_BFu9s()
{
  {
    init_simple_test("Ip_BFu0ll_BFu9s");
    static STRUCT_IF_C Ip_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_BFu9s, Ip_BFu0ll_BFu9s)
//============================================================================


struct  Ip_BFu0ll_C  {
  int *v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 Ip_BFu0ll_C) C1{ Fp FL:0 Fc}



static void Test_Ip_BFu0ll_C()
{
  {
    init_simple_test("Ip_BFu0ll_C");
    static STRUCT_IF_C Ip_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_C, Ip_BFu0ll_C)
//============================================================================


struct  Ip_BFu0ll_D  {
  int *v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 Ip_BFu0ll_D) C1{ Fp FL:0 FL}



static void Test_Ip_BFu0ll_D()
{
  {
    init_simple_test("Ip_BFu0ll_D");
    static STRUCT_IF_C Ip_BFu0ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_D, Ip_BFu0ll_D)
//============================================================================


struct  Ip_BFu0ll_F  {
  int *v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 Ip_BFu0ll_F) C1{ Fp FL:0 Fi}



static void Test_Ip_BFu0ll_F()
{
  {
    init_simple_test("Ip_BFu0ll_F");
    static STRUCT_IF_C Ip_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_F, Ip_BFu0ll_F)
//============================================================================


struct  Ip_BFu0ll_I  {
  int *v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 Ip_BFu0ll_I) C1{ Fp FL:0 Fi}



static void Test_Ip_BFu0ll_I()
{
  {
    init_simple_test("Ip_BFu0ll_I");
    static STRUCT_IF_C Ip_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_I, Ip_BFu0ll_I)
//============================================================================


struct  Ip_BFu0ll_Ip  {
  int *v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 Ip_BFu0ll_Ip) C1{ Fp FL:0 Fp}



static void Test_Ip_BFu0ll_Ip()
{
  {
    init_simple_test("Ip_BFu0ll_Ip");
    static STRUCT_IF_C Ip_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_Ip, Ip_BFu0ll_Ip)
//============================================================================


struct  Ip_BFu0ll_L  {
  int *v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 Ip_BFu0ll_L) C1{ Fp FL:0 FL}



static void Test_Ip_BFu0ll_L()
{
  {
    init_simple_test("Ip_BFu0ll_L");
    static STRUCT_IF_C Ip_BFu0ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_L, Ip_BFu0ll_L)
//============================================================================


struct  Ip_BFu0ll_S  {
  int *v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 Ip_BFu0ll_S) C1{ Fp FL:0 Fs}



static void Test_Ip_BFu0ll_S()
{
  {
    init_simple_test("Ip_BFu0ll_S");
    static STRUCT_IF_C Ip_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_S, Ip_BFu0ll_S)
//============================================================================


struct  Ip_BFu0ll_Uc  {
  int *v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 Ip_BFu0ll_Uc) C1{ Fp FL:0 Fc}



static void Test_Ip_BFu0ll_Uc()
{
  {
    init_simple_test("Ip_BFu0ll_Uc");
    static STRUCT_IF_C Ip_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_Uc, Ip_BFu0ll_Uc)
//============================================================================


struct  Ip_BFu0ll_Ui  {
  int *v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 Ip_BFu0ll_Ui) C1{ Fp FL:0 Fi}



static void Test_Ip_BFu0ll_Ui()
{
  {
    init_simple_test("Ip_BFu0ll_Ui");
    static STRUCT_IF_C Ip_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_Ui, Ip_BFu0ll_Ui)
//============================================================================


struct  Ip_BFu0ll_Ul  {
  int *v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 Ip_BFu0ll_Ul) C1{ Fp FL:0 FL}



static void Test_Ip_BFu0ll_Ul()
{
  {
    init_simple_test("Ip_BFu0ll_Ul");
    static STRUCT_IF_C Ip_BFu0ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_Ul, Ip_BFu0ll_Ul)
//============================================================================


struct  Ip_BFu0ll_Us  {
  int *v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 Ip_BFu0ll_Us) C1{ Fp FL:0 Fs}



static void Test_Ip_BFu0ll_Us()
{
  {
    init_simple_test("Ip_BFu0ll_Us");
    static STRUCT_IF_C Ip_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_Us, Ip_BFu0ll_Us)
//============================================================================


struct  Ip_BFu0ll_Vp  {
  int *v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 Ip_BFu0ll_Vp) C1{ Fp FL:0 Fp}



static void Test_Ip_BFu0ll_Vp()
{
  {
    init_simple_test("Ip_BFu0ll_Vp");
    static STRUCT_IF_C Ip_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0ll_Vp, Ip_BFu0ll_Vp)
//============================================================================


struct  Ip_BFu0s  {
  int *v1;
  unsigned short  :0;
};
//SIG(1 Ip_BFu0s) C1{ Fp Fs:0}



static void Test_Ip_BFu0s()
{
  {
    init_simple_test("Ip_BFu0s");
    static STRUCT_IF_C Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s, Ip_BFu0s)
//============================================================================


struct  Ip_BFu0s_BFu0c  {
  int *v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 Ip_BFu0s_BFu0c) C1{ Fp Fs:0 Fc:0}



static void Test_Ip_BFu0s_BFu0c()
{
  {
    init_simple_test("Ip_BFu0s_BFu0c");
    static STRUCT_IF_C Ip_BFu0s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu0c, Ip_BFu0s_BFu0c)
//============================================================================


struct  Ip_BFu0s_BFu0i  {
  int *v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 Ip_BFu0s_BFu0i) C1{ Fp Fs:0 Fi:0}



static void Test_Ip_BFu0s_BFu0i()
{
  {
    init_simple_test("Ip_BFu0s_BFu0i");
    static STRUCT_IF_C Ip_BFu0s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu0i, Ip_BFu0s_BFu0i)
//============================================================================


struct  Ip_BFu0s_BFu0ll  {
  int *v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 Ip_BFu0s_BFu0ll) C1{ Fp Fs:0 FL:0}



static void Test_Ip_BFu0s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu0ll");
    static STRUCT_IF_C Ip_BFu0s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu0ll, Ip_BFu0s_BFu0ll)
//============================================================================


struct  Ip_BFu0s_BFu0s  {
  int *v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 Ip_BFu0s_BFu0s) C1{ Fp Fs:0 Fs:0}



static void Test_Ip_BFu0s_BFu0s()
{
  {
    init_simple_test("Ip_BFu0s_BFu0s");
    static STRUCT_IF_C Ip_BFu0s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(Ip_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu0s, Ip_BFu0s_BFu0s)
//============================================================================


struct  Ip_BFu0s_BFu15i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 Ip_BFu0s_BFu15i) C1{ Fp Fs:0 Fi:15}



static void Test_Ip_BFu0s_BFu15i()
{
  {
    init_simple_test("Ip_BFu0s_BFu15i");
    static STRUCT_IF_C Ip_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu15i, Ip_BFu0s_BFu15i)
//============================================================================


struct  Ip_BFu0s_BFu15ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 Ip_BFu0s_BFu15ll) C1{ Fp Fs:0 FL:15}



static void Test_Ip_BFu0s_BFu15ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu15ll");
    static STRUCT_IF_C Ip_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu15ll, Ip_BFu0s_BFu15ll)
//============================================================================


struct  Ip_BFu0s_BFu15s  {
  int *v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 Ip_BFu0s_BFu15s) C1{ Fp Fs:0 Fs:15}



static void Test_Ip_BFu0s_BFu15s()
{
  {
    init_simple_test("Ip_BFu0s_BFu15s");
    static STRUCT_IF_C Ip_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu15s, Ip_BFu0s_BFu15s)
//============================================================================


struct  Ip_BFu0s_BFu16i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 Ip_BFu0s_BFu16i) C1{ Fp Fs:0 Fi:16}



static void Test_Ip_BFu0s_BFu16i()
{
  {
    init_simple_test("Ip_BFu0s_BFu16i");
    static STRUCT_IF_C Ip_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu16i, Ip_BFu0s_BFu16i)
//============================================================================


struct  Ip_BFu0s_BFu16ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 Ip_BFu0s_BFu16ll) C1{ Fp Fs:0 FL:16}



static void Test_Ip_BFu0s_BFu16ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu16ll");
    static STRUCT_IF_C Ip_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu16ll, Ip_BFu0s_BFu16ll)
//============================================================================


struct  Ip_BFu0s_BFu16s  {
  int *v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 Ip_BFu0s_BFu16s) C1{ Fp Fs:0 Fs:16}



static void Test_Ip_BFu0s_BFu16s()
{
  {
    init_simple_test("Ip_BFu0s_BFu16s");
    static STRUCT_IF_C Ip_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu16s, Ip_BFu0s_BFu16s)
//============================================================================


struct  Ip_BFu0s_BFu17i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 Ip_BFu0s_BFu17i) C1{ Fp Fs:0 Fi:17}



static void Test_Ip_BFu0s_BFu17i()
{
  {
    init_simple_test("Ip_BFu0s_BFu17i");
    static STRUCT_IF_C Ip_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu17i, Ip_BFu0s_BFu17i)
//============================================================================


struct  Ip_BFu0s_BFu17ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 Ip_BFu0s_BFu17ll) C1{ Fp Fs:0 FL:17}



static void Test_Ip_BFu0s_BFu17ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu17ll");
    static STRUCT_IF_C Ip_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu17ll, Ip_BFu0s_BFu17ll)
//============================================================================


struct  Ip_BFu0s_BFu1c  {
  int *v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 Ip_BFu0s_BFu1c) C1{ Fp Fs:0 Fc:1}



static void Test_Ip_BFu0s_BFu1c()
{
  {
    init_simple_test("Ip_BFu0s_BFu1c");
    static STRUCT_IF_C Ip_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu1c, Ip_BFu0s_BFu1c)
//============================================================================


struct  Ip_BFu0s_BFu1i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 Ip_BFu0s_BFu1i) C1{ Fp Fs:0 Fi:1}



static void Test_Ip_BFu0s_BFu1i()
{
  {
    init_simple_test("Ip_BFu0s_BFu1i");
    static STRUCT_IF_C Ip_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu1i, Ip_BFu0s_BFu1i)
//============================================================================


struct  Ip_BFu0s_BFu1ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 Ip_BFu0s_BFu1ll) C1{ Fp Fs:0 FL:1}



static void Test_Ip_BFu0s_BFu1ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu1ll");
    static STRUCT_IF_C Ip_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu1ll, Ip_BFu0s_BFu1ll)
//============================================================================


struct  Ip_BFu0s_BFu1s  {
  int *v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 Ip_BFu0s_BFu1s) C1{ Fp Fs:0 Fs:1}



static void Test_Ip_BFu0s_BFu1s()
{
  {
    init_simple_test("Ip_BFu0s_BFu1s");
    static STRUCT_IF_C Ip_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu1s, Ip_BFu0s_BFu1s)
//============================================================================


struct  Ip_BFu0s_BFu31i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 Ip_BFu0s_BFu31i) C1{ Fp Fs:0 Fi:31}



static void Test_Ip_BFu0s_BFu31i()
{
  {
    init_simple_test("Ip_BFu0s_BFu31i");
    static STRUCT_IF_C Ip_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu31i, Ip_BFu0s_BFu31i)
//============================================================================


struct  Ip_BFu0s_BFu31ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 Ip_BFu0s_BFu31ll) C1{ Fp Fs:0 FL:31}



static void Test_Ip_BFu0s_BFu31ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu31ll");
    static STRUCT_IF_C Ip_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu31ll, Ip_BFu0s_BFu31ll)
//============================================================================


struct  Ip_BFu0s_BFu32i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 Ip_BFu0s_BFu32i) C1{ Fp Fs:0 Fi:32}



static void Test_Ip_BFu0s_BFu32i()
{
  {
    init_simple_test("Ip_BFu0s_BFu32i");
    static STRUCT_IF_C Ip_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu32i, Ip_BFu0s_BFu32i)
//============================================================================


struct  Ip_BFu0s_BFu32ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 Ip_BFu0s_BFu32ll) C1{ Fp Fs:0 FL:32}



static void Test_Ip_BFu0s_BFu32ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu32ll");
    static STRUCT_IF_C Ip_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu32ll, Ip_BFu0s_BFu32ll)
//============================================================================


struct  Ip_BFu0s_BFu33  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 Ip_BFu0s_BFu33) C1{ Fp Fs:0 FL:33}



static void Test_Ip_BFu0s_BFu33()
{
  {
    init_simple_test("Ip_BFu0s_BFu33");
    static STRUCT_IF_C Ip_BFu0s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu0s_BFu33");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu33, Ip_BFu0s_BFu33)
//============================================================================


struct  Ip_BFu0s_BFu7c  {
  int *v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 Ip_BFu0s_BFu7c) C1{ Fp Fs:0 Fc:7}



static void Test_Ip_BFu0s_BFu7c()
{
  {
    init_simple_test("Ip_BFu0s_BFu7c");
    static STRUCT_IF_C Ip_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu7c, Ip_BFu0s_BFu7c)
//============================================================================


struct  Ip_BFu0s_BFu7i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 Ip_BFu0s_BFu7i) C1{ Fp Fs:0 Fi:7}



static void Test_Ip_BFu0s_BFu7i()
{
  {
    init_simple_test("Ip_BFu0s_BFu7i");
    static STRUCT_IF_C Ip_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu7i, Ip_BFu0s_BFu7i)
//============================================================================


struct  Ip_BFu0s_BFu7ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 Ip_BFu0s_BFu7ll) C1{ Fp Fs:0 FL:7}



static void Test_Ip_BFu0s_BFu7ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu7ll");
    static STRUCT_IF_C Ip_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu7ll, Ip_BFu0s_BFu7ll)
//============================================================================


struct  Ip_BFu0s_BFu7s  {
  int *v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 Ip_BFu0s_BFu7s) C1{ Fp Fs:0 Fs:7}



static void Test_Ip_BFu0s_BFu7s()
{
  {
    init_simple_test("Ip_BFu0s_BFu7s");
    static STRUCT_IF_C Ip_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu7s, Ip_BFu0s_BFu7s)
//============================================================================


struct  Ip_BFu0s_BFu8c  {
  int *v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 Ip_BFu0s_BFu8c) C1{ Fp Fs:0 Fc:8}



static void Test_Ip_BFu0s_BFu8c()
{
  {
    init_simple_test("Ip_BFu0s_BFu8c");
    static STRUCT_IF_C Ip_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu8c, Ip_BFu0s_BFu8c)
//============================================================================


struct  Ip_BFu0s_BFu8i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 Ip_BFu0s_BFu8i) C1{ Fp Fs:0 Fi:8}



static void Test_Ip_BFu0s_BFu8i()
{
  {
    init_simple_test("Ip_BFu0s_BFu8i");
    static STRUCT_IF_C Ip_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu8i, Ip_BFu0s_BFu8i)
//============================================================================


struct  Ip_BFu0s_BFu8ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 Ip_BFu0s_BFu8ll) C1{ Fp Fs:0 FL:8}



static void Test_Ip_BFu0s_BFu8ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu8ll");
    static STRUCT_IF_C Ip_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu8ll, Ip_BFu0s_BFu8ll)
//============================================================================


struct  Ip_BFu0s_BFu8s  {
  int *v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 Ip_BFu0s_BFu8s) C1{ Fp Fs:0 Fs:8}



static void Test_Ip_BFu0s_BFu8s()
{
  {
    init_simple_test("Ip_BFu0s_BFu8s");
    static STRUCT_IF_C Ip_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu8s, Ip_BFu0s_BFu8s)
//============================================================================


struct  Ip_BFu0s_BFu9i  {
  int *v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 Ip_BFu0s_BFu9i) C1{ Fp Fs:0 Fi:9}



static void Test_Ip_BFu0s_BFu9i()
{
  {
    init_simple_test("Ip_BFu0s_BFu9i");
    static STRUCT_IF_C Ip_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu9i, Ip_BFu0s_BFu9i)
//============================================================================


struct  Ip_BFu0s_BFu9ll  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 Ip_BFu0s_BFu9ll) C1{ Fp Fs:0 FL:9}



static void Test_Ip_BFu0s_BFu9ll()
{
  {
    init_simple_test("Ip_BFu0s_BFu9ll");
    static STRUCT_IF_C Ip_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu9ll, Ip_BFu0s_BFu9ll)
//============================================================================


struct  Ip_BFu0s_BFu9s  {
  int *v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 Ip_BFu0s_BFu9s) C1{ Fp Fs:0 Fs:9}



static void Test_Ip_BFu0s_BFu9s()
{
  {
    init_simple_test("Ip_BFu0s_BFu9s");
    static STRUCT_IF_C Ip_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_BFu9s, Ip_BFu0s_BFu9s)
//============================================================================


struct  Ip_BFu0s_C  {
  int *v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 Ip_BFu0s_C) C1{ Fp Fs:0 Fc}



static void Test_Ip_BFu0s_C()
{
  {
    init_simple_test("Ip_BFu0s_C");
    static STRUCT_IF_C Ip_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_C)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_C.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_C, Ip_BFu0s_C)
//============================================================================


struct  Ip_BFu0s_D  {
  int *v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 Ip_BFu0s_D) C1{ Fp Fs:0 FL}



static void Test_Ip_BFu0s_D()
{
  {
    init_simple_test("Ip_BFu0s_D");
    static STRUCT_IF_C Ip_BFu0s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_D)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_D.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_D, Ip_BFu0s_D)
//============================================================================


struct  Ip_BFu0s_F  {
  int *v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 Ip_BFu0s_F) C1{ Fp Fs:0 Fi}



static void Test_Ip_BFu0s_F()
{
  {
    init_simple_test("Ip_BFu0s_F");
    static STRUCT_IF_C Ip_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_F)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_F.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_F, Ip_BFu0s_F)
//============================================================================


struct  Ip_BFu0s_I  {
  int *v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 Ip_BFu0s_I) C1{ Fp Fs:0 Fi}



static void Test_Ip_BFu0s_I()
{
  {
    init_simple_test("Ip_BFu0s_I");
    static STRUCT_IF_C Ip_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_I)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_I.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_I, Ip_BFu0s_I)
//============================================================================


struct  Ip_BFu0s_Ip  {
  int *v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 Ip_BFu0s_Ip) C1{ Fp Fs:0 Fp}



static void Test_Ip_BFu0s_Ip()
{
  {
    init_simple_test("Ip_BFu0s_Ip");
    static STRUCT_IF_C Ip_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_Ip.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_Ip, Ip_BFu0s_Ip)
//============================================================================


struct  Ip_BFu0s_L  {
  int *v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 Ip_BFu0s_L) C1{ Fp Fs:0 FL}



static void Test_Ip_BFu0s_L()
{
  {
    init_simple_test("Ip_BFu0s_L");
    static STRUCT_IF_C Ip_BFu0s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_L)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_L.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_L, Ip_BFu0s_L)
//============================================================================


struct  Ip_BFu0s_S  {
  int *v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 Ip_BFu0s_S) C1{ Fp Fs:0 Fs}



static void Test_Ip_BFu0s_S()
{
  {
    init_simple_test("Ip_BFu0s_S");
    static STRUCT_IF_C Ip_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_S)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_S.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_S, Ip_BFu0s_S)
//============================================================================


struct  Ip_BFu0s_Uc  {
  int *v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 Ip_BFu0s_Uc) C1{ Fp Fs:0 Fc}



static void Test_Ip_BFu0s_Uc()
{
  {
    init_simple_test("Ip_BFu0s_Uc");
    static STRUCT_IF_C Ip_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_Uc.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_Uc, Ip_BFu0s_Uc)
//============================================================================


struct  Ip_BFu0s_Ui  {
  int *v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 Ip_BFu0s_Ui) C1{ Fp Fs:0 Fi}



static void Test_Ip_BFu0s_Ui()
{
  {
    init_simple_test("Ip_BFu0s_Ui");
    static STRUCT_IF_C Ip_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_Ui.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_Ui, Ip_BFu0s_Ui)
//============================================================================


struct  Ip_BFu0s_Ul  {
  int *v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 Ip_BFu0s_Ul) C1{ Fp Fs:0 FL}



static void Test_Ip_BFu0s_Ul()
{
  {
    init_simple_test("Ip_BFu0s_Ul");
    static STRUCT_IF_C Ip_BFu0s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_Ul.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_Ul, Ip_BFu0s_Ul)
//============================================================================


struct  Ip_BFu0s_Us  {
  int *v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 Ip_BFu0s_Us) C1{ Fp Fs:0 Fs}



static void Test_Ip_BFu0s_Us()
{
  {
    init_simple_test("Ip_BFu0s_Us");
    static STRUCT_IF_C Ip_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_Us.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_Us, Ip_BFu0s_Us)
//============================================================================


struct  Ip_BFu0s_Vp  {
  int *v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 Ip_BFu0s_Vp) C1{ Fp Fs:0 Fp}



static void Test_Ip_BFu0s_Vp()
{
  {
    init_simple_test("Ip_BFu0s_Vp");
    static STRUCT_IF_C Ip_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "Ip_BFu0s_Vp.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu0s_Vp, Ip_BFu0s_Vp)
//============================================================================


struct  Ip_BFu15i_BFu0c  {
  int *v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 Ip_BFu15i_BFu0c) C1{ Fp Fi:15 Fc:0}



static void Test_Ip_BFu15i_BFu0c()
{
  {
    init_simple_test("Ip_BFu15i_BFu0c");
    static STRUCT_IF_C Ip_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15i_BFu0c, Ip_BFu15i_BFu0c)
//============================================================================


struct  Ip_BFu15i_BFu0i  {
  int *v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 Ip_BFu15i_BFu0i) C1{ Fp Fi:15 Fi:0}



static void Test_Ip_BFu15i_BFu0i()
{
  {
    init_simple_test("Ip_BFu15i_BFu0i");
    static STRUCT_IF_C Ip_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15i_BFu0i, Ip_BFu15i_BFu0i)
//============================================================================


struct  Ip_BFu15i_BFu0ll  {
  int *v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 Ip_BFu15i_BFu0ll) C1{ Fp Fi:15 FL:0}



static void Test_Ip_BFu15i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu15i_BFu0ll");
    static STRUCT_IF_C Ip_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15i_BFu0ll, Ip_BFu15i_BFu0ll)
//============================================================================


struct  Ip_BFu15i_BFu0s  {
  int *v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 Ip_BFu15i_BFu0s) C1{ Fp Fi:15 Fs:0}



static void Test_Ip_BFu15i_BFu0s()
{
  {
    init_simple_test("Ip_BFu15i_BFu0s");
    static STRUCT_IF_C Ip_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15i_BFu0s, Ip_BFu15i_BFu0s)
//============================================================================


struct  Ip_BFu15ll_BFu0c  {
  int *v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 Ip_BFu15ll_BFu0c) C1{ Fp FL:15 Fc:0}



static void Test_Ip_BFu15ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu15ll_BFu0c");
    static STRUCT_IF_C Ip_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15ll_BFu0c, Ip_BFu15ll_BFu0c)
//============================================================================


struct  Ip_BFu15ll_BFu0i  {
  int *v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 Ip_BFu15ll_BFu0i) C1{ Fp FL:15 Fi:0}



static void Test_Ip_BFu15ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu15ll_BFu0i");
    static STRUCT_IF_C Ip_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15ll_BFu0i, Ip_BFu15ll_BFu0i)
//============================================================================


struct  Ip_BFu15ll_BFu0ll  {
  int *v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 Ip_BFu15ll_BFu0ll) C1{ Fp FL:15 FL:0}



static void Test_Ip_BFu15ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu15ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15ll_BFu0ll, Ip_BFu15ll_BFu0ll)
//============================================================================


struct  Ip_BFu15ll_BFu0s  {
  int *v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 Ip_BFu15ll_BFu0s) C1{ Fp FL:15 Fs:0}



static void Test_Ip_BFu15ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu15ll_BFu0s");
    static STRUCT_IF_C Ip_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15ll_BFu0s, Ip_BFu15ll_BFu0s)
//============================================================================


struct  Ip_BFu15s_BFu0c  {
  int *v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 Ip_BFu15s_BFu0c) C1{ Fp Fs:15 Fc:0}



static void Test_Ip_BFu15s_BFu0c()
{
  {
    init_simple_test("Ip_BFu15s_BFu0c");
    static STRUCT_IF_C Ip_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15s_BFu0c, Ip_BFu15s_BFu0c)
//============================================================================


struct  Ip_BFu15s_BFu0i  {
  int *v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 Ip_BFu15s_BFu0i) C1{ Fp Fs:15 Fi:0}



static void Test_Ip_BFu15s_BFu0i()
{
  {
    init_simple_test("Ip_BFu15s_BFu0i");
    static STRUCT_IF_C Ip_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15s_BFu0i, Ip_BFu15s_BFu0i)
//============================================================================


struct  Ip_BFu15s_BFu0ll  {
  int *v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 Ip_BFu15s_BFu0ll) C1{ Fp Fs:15 FL:0}



static void Test_Ip_BFu15s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu15s_BFu0ll");
    static STRUCT_IF_C Ip_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15s_BFu0ll, Ip_BFu15s_BFu0ll)
//============================================================================


struct  Ip_BFu15s_BFu0s  {
  int *v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 Ip_BFu15s_BFu0s) C1{ Fp Fs:15 Fs:0}



static void Test_Ip_BFu15s_BFu0s()
{
  {
    init_simple_test("Ip_BFu15s_BFu0s");
    static STRUCT_IF_C Ip_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, 1, "Ip_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 15, hide_ull(1LL<<14), "Ip_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu15s_BFu0s, Ip_BFu15s_BFu0s)
//============================================================================


struct  Ip_BFu16i_BFu0c  {
  int *v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 Ip_BFu16i_BFu0c) C1{ Fp Fi:16 Fc:0}



static void Test_Ip_BFu16i_BFu0c()
{
  {
    init_simple_test("Ip_BFu16i_BFu0c");
    static STRUCT_IF_C Ip_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16i_BFu0c, Ip_BFu16i_BFu0c)
//============================================================================


struct  Ip_BFu16i_BFu0i  {
  int *v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 Ip_BFu16i_BFu0i) C1{ Fp Fi:16 Fi:0}



static void Test_Ip_BFu16i_BFu0i()
{
  {
    init_simple_test("Ip_BFu16i_BFu0i");
    static STRUCT_IF_C Ip_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16i_BFu0i, Ip_BFu16i_BFu0i)
//============================================================================


struct  Ip_BFu16i_BFu0ll  {
  int *v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 Ip_BFu16i_BFu0ll) C1{ Fp Fi:16 FL:0}



static void Test_Ip_BFu16i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu16i_BFu0ll");
    static STRUCT_IF_C Ip_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16i_BFu0ll, Ip_BFu16i_BFu0ll)
//============================================================================


struct  Ip_BFu16i_BFu0s  {
  int *v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 Ip_BFu16i_BFu0s) C1{ Fp Fi:16 Fs:0}



static void Test_Ip_BFu16i_BFu0s()
{
  {
    init_simple_test("Ip_BFu16i_BFu0s");
    static STRUCT_IF_C Ip_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16i_BFu0s, Ip_BFu16i_BFu0s)
//============================================================================


struct  Ip_BFu16ll_BFu0c  {
  int *v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 Ip_BFu16ll_BFu0c) C1{ Fp FL:16 Fc:0}



static void Test_Ip_BFu16ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu16ll_BFu0c");
    static STRUCT_IF_C Ip_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16ll_BFu0c, Ip_BFu16ll_BFu0c)
//============================================================================


struct  Ip_BFu16ll_BFu0i  {
  int *v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 Ip_BFu16ll_BFu0i) C1{ Fp FL:16 Fi:0}



static void Test_Ip_BFu16ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu16ll_BFu0i");
    static STRUCT_IF_C Ip_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16ll_BFu0i, Ip_BFu16ll_BFu0i)
//============================================================================


struct  Ip_BFu16ll_BFu0ll  {
  int *v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 Ip_BFu16ll_BFu0ll) C1{ Fp FL:16 FL:0}



static void Test_Ip_BFu16ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu16ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16ll_BFu0ll, Ip_BFu16ll_BFu0ll)
//============================================================================


struct  Ip_BFu16ll_BFu0s  {
  int *v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 Ip_BFu16ll_BFu0s) C1{ Fp FL:16 Fs:0}



static void Test_Ip_BFu16ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu16ll_BFu0s");
    static STRUCT_IF_C Ip_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16ll_BFu0s, Ip_BFu16ll_BFu0s)
//============================================================================


struct  Ip_BFu16s_BFu0c  {
  int *v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 Ip_BFu16s_BFu0c) C1{ Fp Fs:16 Fc:0}



static void Test_Ip_BFu16s_BFu0c()
{
  {
    init_simple_test("Ip_BFu16s_BFu0c");
    static STRUCT_IF_C Ip_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16s_BFu0c, Ip_BFu16s_BFu0c)
//============================================================================


struct  Ip_BFu16s_BFu0i  {
  int *v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 Ip_BFu16s_BFu0i) C1{ Fp Fs:16 Fi:0}



static void Test_Ip_BFu16s_BFu0i()
{
  {
    init_simple_test("Ip_BFu16s_BFu0i");
    static STRUCT_IF_C Ip_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16s_BFu0i, Ip_BFu16s_BFu0i)
//============================================================================


struct  Ip_BFu16s_BFu0ll  {
  int *v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 Ip_BFu16s_BFu0ll) C1{ Fp Fs:16 FL:0}



static void Test_Ip_BFu16s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu16s_BFu0ll");
    static STRUCT_IF_C Ip_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16s_BFu0ll, Ip_BFu16s_BFu0ll)
//============================================================================


struct  Ip_BFu16s_BFu0s  {
  int *v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 Ip_BFu16s_BFu0s) C1{ Fp Fs:16 Fs:0}



static void Test_Ip_BFu16s_BFu0s()
{
  {
    init_simple_test("Ip_BFu16s_BFu0s");
    static STRUCT_IF_C Ip_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, 1, "Ip_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 16, hide_ull(1LL<<15), "Ip_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu16s_BFu0s, Ip_BFu16s_BFu0s)
//============================================================================


struct  Ip_BFu17i_BFu0c  {
  int *v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 Ip_BFu17i_BFu0c) C1{ Fp Fi:17 Fc:0}



static void Test_Ip_BFu17i_BFu0c()
{
  {
    init_simple_test("Ip_BFu17i_BFu0c");
    static STRUCT_IF_C Ip_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17i_BFu0c, Ip_BFu17i_BFu0c)
//============================================================================


struct  Ip_BFu17i_BFu0i  {
  int *v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 Ip_BFu17i_BFu0i) C1{ Fp Fi:17 Fi:0}



static void Test_Ip_BFu17i_BFu0i()
{
  {
    init_simple_test("Ip_BFu17i_BFu0i");
    static STRUCT_IF_C Ip_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17i_BFu0i, Ip_BFu17i_BFu0i)
//============================================================================


struct  Ip_BFu17i_BFu0ll  {
  int *v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 Ip_BFu17i_BFu0ll) C1{ Fp Fi:17 FL:0}



static void Test_Ip_BFu17i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu17i_BFu0ll");
    static STRUCT_IF_C Ip_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17i_BFu0ll, Ip_BFu17i_BFu0ll)
//============================================================================


struct  Ip_BFu17i_BFu0s  {
  int *v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 Ip_BFu17i_BFu0s) C1{ Fp Fi:17 Fs:0}



static void Test_Ip_BFu17i_BFu0s()
{
  {
    init_simple_test("Ip_BFu17i_BFu0s");
    static STRUCT_IF_C Ip_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17i_BFu0s, Ip_BFu17i_BFu0s)
//============================================================================


struct  Ip_BFu17ll_BFu0c  {
  int *v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 Ip_BFu17ll_BFu0c) C1{ Fp FL:17 Fc:0}



static void Test_Ip_BFu17ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu17ll_BFu0c");
    static STRUCT_IF_C Ip_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17ll_BFu0c, Ip_BFu17ll_BFu0c)
//============================================================================


struct  Ip_BFu17ll_BFu0i  {
  int *v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 Ip_BFu17ll_BFu0i) C1{ Fp FL:17 Fi:0}



static void Test_Ip_BFu17ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu17ll_BFu0i");
    static STRUCT_IF_C Ip_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17ll_BFu0i, Ip_BFu17ll_BFu0i)
//============================================================================


struct  Ip_BFu17ll_BFu0ll  {
  int *v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 Ip_BFu17ll_BFu0ll) C1{ Fp FL:17 FL:0}



static void Test_Ip_BFu17ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu17ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17ll_BFu0ll, Ip_BFu17ll_BFu0ll)
//============================================================================


struct  Ip_BFu17ll_BFu0s  {
  int *v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 Ip_BFu17ll_BFu0s) C1{ Fp FL:17 Fs:0}



static void Test_Ip_BFu17ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu17ll_BFu0s");
    static STRUCT_IF_C Ip_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, 1, "Ip_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 17, hide_ull(1LL<<16), "Ip_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu17ll_BFu0s, Ip_BFu17ll_BFu0s)
//============================================================================


struct  Ip_BFu1c_BFu0c  {
  int *v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 Ip_BFu1c_BFu0c) C1{ Fp Fc:1 Fc:0}



static void Test_Ip_BFu1c_BFu0c()
{
  {
    init_simple_test("Ip_BFu1c_BFu0c");
    static STRUCT_IF_C Ip_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1c_BFu0c, Ip_BFu1c_BFu0c)
//============================================================================


struct  Ip_BFu1c_BFu0i  {
  int *v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 Ip_BFu1c_BFu0i) C1{ Fp Fc:1 Fi:0}



static void Test_Ip_BFu1c_BFu0i()
{
  {
    init_simple_test("Ip_BFu1c_BFu0i");
    static STRUCT_IF_C Ip_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1c_BFu0i, Ip_BFu1c_BFu0i)
//============================================================================


struct  Ip_BFu1c_BFu0ll  {
  int *v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 Ip_BFu1c_BFu0ll) C1{ Fp Fc:1 FL:0}



static void Test_Ip_BFu1c_BFu0ll()
{
  {
    init_simple_test("Ip_BFu1c_BFu0ll");
    static STRUCT_IF_C Ip_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1c_BFu0ll, Ip_BFu1c_BFu0ll)
//============================================================================


struct  Ip_BFu1c_BFu0s  {
  int *v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 Ip_BFu1c_BFu0s) C1{ Fp Fc:1 Fs:0}



static void Test_Ip_BFu1c_BFu0s()
{
  {
    init_simple_test("Ip_BFu1c_BFu0s");
    static STRUCT_IF_C Ip_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1c_BFu0s, Ip_BFu1c_BFu0s)
//============================================================================


struct  Ip_BFu1i_BFu0c  {
  int *v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 Ip_BFu1i_BFu0c) C1{ Fp Fi:1 Fc:0}



static void Test_Ip_BFu1i_BFu0c()
{
  {
    init_simple_test("Ip_BFu1i_BFu0c");
    static STRUCT_IF_C Ip_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1i_BFu0c, Ip_BFu1i_BFu0c)
//============================================================================


struct  Ip_BFu1i_BFu0i  {
  int *v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 Ip_BFu1i_BFu0i) C1{ Fp Fi:1 Fi:0}



static void Test_Ip_BFu1i_BFu0i()
{
  {
    init_simple_test("Ip_BFu1i_BFu0i");
    static STRUCT_IF_C Ip_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1i_BFu0i, Ip_BFu1i_BFu0i)
//============================================================================


struct  Ip_BFu1i_BFu0ll  {
  int *v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 Ip_BFu1i_BFu0ll) C1{ Fp Fi:1 FL:0}



static void Test_Ip_BFu1i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu1i_BFu0ll");
    static STRUCT_IF_C Ip_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1i_BFu0ll, Ip_BFu1i_BFu0ll)
//============================================================================


struct  Ip_BFu1i_BFu0s  {
  int *v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 Ip_BFu1i_BFu0s) C1{ Fp Fi:1 Fs:0}



static void Test_Ip_BFu1i_BFu0s()
{
  {
    init_simple_test("Ip_BFu1i_BFu0s");
    static STRUCT_IF_C Ip_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1i_BFu0s, Ip_BFu1i_BFu0s)
//============================================================================


struct  Ip_BFu1ll_BFu0c  {
  int *v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 Ip_BFu1ll_BFu0c) C1{ Fp FL:1 Fc:0}



static void Test_Ip_BFu1ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu1ll_BFu0c");
    static STRUCT_IF_C Ip_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1ll_BFu0c, Ip_BFu1ll_BFu0c)
//============================================================================


struct  Ip_BFu1ll_BFu0i  {
  int *v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 Ip_BFu1ll_BFu0i) C1{ Fp FL:1 Fi:0}



static void Test_Ip_BFu1ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu1ll_BFu0i");
    static STRUCT_IF_C Ip_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1ll_BFu0i, Ip_BFu1ll_BFu0i)
//============================================================================


struct  Ip_BFu1ll_BFu0ll  {
  int *v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 Ip_BFu1ll_BFu0ll) C1{ Fp FL:1 FL:0}



static void Test_Ip_BFu1ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu1ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1ll_BFu0ll, Ip_BFu1ll_BFu0ll)
//============================================================================


struct  Ip_BFu1ll_BFu0s  {
  int *v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 Ip_BFu1ll_BFu0s) C1{ Fp FL:1 Fs:0}



static void Test_Ip_BFu1ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu1ll_BFu0s");
    static STRUCT_IF_C Ip_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1ll_BFu0s, Ip_BFu1ll_BFu0s)
//============================================================================


struct  Ip_BFu1s_BFu0c  {
  int *v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 Ip_BFu1s_BFu0c) C1{ Fp Fs:1 Fc:0}



static void Test_Ip_BFu1s_BFu0c()
{
  {
    init_simple_test("Ip_BFu1s_BFu0c");
    static STRUCT_IF_C Ip_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1s_BFu0c, Ip_BFu1s_BFu0c)
//============================================================================


struct  Ip_BFu1s_BFu0i  {
  int *v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 Ip_BFu1s_BFu0i) C1{ Fp Fs:1 Fi:0}



static void Test_Ip_BFu1s_BFu0i()
{
  {
    init_simple_test("Ip_BFu1s_BFu0i");
    static STRUCT_IF_C Ip_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1s_BFu0i, Ip_BFu1s_BFu0i)
//============================================================================


struct  Ip_BFu1s_BFu0ll  {
  int *v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 Ip_BFu1s_BFu0ll) C1{ Fp Fs:1 FL:0}



static void Test_Ip_BFu1s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu1s_BFu0ll");
    static STRUCT_IF_C Ip_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1s_BFu0ll, Ip_BFu1s_BFu0ll)
//============================================================================


struct  Ip_BFu1s_BFu0s  {
  int *v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 Ip_BFu1s_BFu0s) C1{ Fp Fs:1 Fs:0}



static void Test_Ip_BFu1s_BFu0s()
{
  {
    init_simple_test("Ip_BFu1s_BFu0s");
    static STRUCT_IF_C Ip_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 1, 1, "Ip_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu1s_BFu0s, Ip_BFu1s_BFu0s)
//============================================================================


struct  Ip_BFu31i_BFu0c  {
  int *v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 Ip_BFu31i_BFu0c) C1{ Fp Fi:31 Fc:0}



static void Test_Ip_BFu31i_BFu0c()
{
  {
    init_simple_test("Ip_BFu31i_BFu0c");
    static STRUCT_IF_C Ip_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31i_BFu0c, Ip_BFu31i_BFu0c)
//============================================================================


struct  Ip_BFu31i_BFu0i  {
  int *v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 Ip_BFu31i_BFu0i) C1{ Fp Fi:31 Fi:0}



static void Test_Ip_BFu31i_BFu0i()
{
  {
    init_simple_test("Ip_BFu31i_BFu0i");
    static STRUCT_IF_C Ip_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31i_BFu0i, Ip_BFu31i_BFu0i)
//============================================================================


struct  Ip_BFu31i_BFu0ll  {
  int *v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 Ip_BFu31i_BFu0ll) C1{ Fp Fi:31 FL:0}



static void Test_Ip_BFu31i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu31i_BFu0ll");
    static STRUCT_IF_C Ip_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31i_BFu0ll, Ip_BFu31i_BFu0ll)
//============================================================================


struct  Ip_BFu31i_BFu0s  {
  int *v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 Ip_BFu31i_BFu0s) C1{ Fp Fi:31 Fs:0}



static void Test_Ip_BFu31i_BFu0s()
{
  {
    init_simple_test("Ip_BFu31i_BFu0s");
    static STRUCT_IF_C Ip_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31i_BFu0s, Ip_BFu31i_BFu0s)
//============================================================================


struct  Ip_BFu31ll_BFu0c  {
  int *v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 Ip_BFu31ll_BFu0c) C1{ Fp FL:31 Fc:0}



static void Test_Ip_BFu31ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu31ll_BFu0c");
    static STRUCT_IF_C Ip_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu0c, Ip_BFu31ll_BFu0c)
//============================================================================


struct  Ip_BFu31ll_BFu0i  {
  int *v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 Ip_BFu31ll_BFu0i) C1{ Fp FL:31 Fi:0}



static void Test_Ip_BFu31ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu31ll_BFu0i");
    static STRUCT_IF_C Ip_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu0i, Ip_BFu31ll_BFu0i)
//============================================================================


struct  Ip_BFu31ll_BFu0ll  {
  int *v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 Ip_BFu31ll_BFu0ll) C1{ Fp FL:31 FL:0}



static void Test_Ip_BFu31ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu31ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu0ll, Ip_BFu31ll_BFu0ll)
//============================================================================


struct  Ip_BFu31ll_BFu0s  {
  int *v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 Ip_BFu31ll_BFu0s) C1{ Fp FL:31 Fs:0}



static void Test_Ip_BFu31ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu31ll_BFu0s");
    static STRUCT_IF_C Ip_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, 1, "Ip_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 31, hide_ull(1LL<<30), "Ip_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu31ll_BFu0s, Ip_BFu31ll_BFu0s)
//============================================================================


struct  Ip_BFu32i_BFu0c  {
  int *v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 Ip_BFu32i_BFu0c) C1{ Fp Fi:32 Fc:0}



static void Test_Ip_BFu32i_BFu0c()
{
  {
    init_simple_test("Ip_BFu32i_BFu0c");
    static STRUCT_IF_C Ip_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu0c, Ip_BFu32i_BFu0c)
//============================================================================


struct  Ip_BFu32i_BFu0i  {
  int *v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 Ip_BFu32i_BFu0i) C1{ Fp Fi:32 Fi:0}



static void Test_Ip_BFu32i_BFu0i()
{
  {
    init_simple_test("Ip_BFu32i_BFu0i");
    static STRUCT_IF_C Ip_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu0i, Ip_BFu32i_BFu0i)
//============================================================================


struct  Ip_BFu32i_BFu0ll  {
  int *v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 Ip_BFu32i_BFu0ll) C1{ Fp Fi:32 FL:0}



static void Test_Ip_BFu32i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu32i_BFu0ll");
    static STRUCT_IF_C Ip_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu0ll, Ip_BFu32i_BFu0ll)
//============================================================================


struct  Ip_BFu32i_BFu0s  {
  int *v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 Ip_BFu32i_BFu0s) C1{ Fp Fi:32 Fs:0}



static void Test_Ip_BFu32i_BFu0s()
{
  {
    init_simple_test("Ip_BFu32i_BFu0s");
    static STRUCT_IF_C Ip_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32i_BFu0s, Ip_BFu32i_BFu0s)
//============================================================================


struct  Ip_BFu32ll_BFu0c  {
  int *v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 Ip_BFu32ll_BFu0c) C1{ Fp FL:32 Fc:0}



static void Test_Ip_BFu32ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu32ll_BFu0c");
    static STRUCT_IF_C Ip_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu0c, Ip_BFu32ll_BFu0c)
//============================================================================


struct  Ip_BFu32ll_BFu0i  {
  int *v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 Ip_BFu32ll_BFu0i) C1{ Fp FL:32 Fi:0}



static void Test_Ip_BFu32ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu32ll_BFu0i");
    static STRUCT_IF_C Ip_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu0i, Ip_BFu32ll_BFu0i)
//============================================================================


struct  Ip_BFu32ll_BFu0ll  {
  int *v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 Ip_BFu32ll_BFu0ll) C1{ Fp FL:32 FL:0}



static void Test_Ip_BFu32ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu32ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu0ll, Ip_BFu32ll_BFu0ll)
//============================================================================


struct  Ip_BFu32ll_BFu0s  {
  int *v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 Ip_BFu32ll_BFu0s) C1{ Fp FL:32 Fs:0}



static void Test_Ip_BFu32ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu32ll_BFu0s");
    static STRUCT_IF_C Ip_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, 1, "Ip_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 32, hide_ull(1LL<<31), "Ip_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu32ll_BFu0s, Ip_BFu32ll_BFu0s)
//============================================================================


struct  Ip_BFu33_BFu0c  {
  int *v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 Ip_BFu33_BFu0c) C1{ Fp FL:33 Fc:0}



static void Test_Ip_BFu33_BFu0c()
{
  {
    init_simple_test("Ip_BFu33_BFu0c");
    static STRUCT_IF_C Ip_BFu33_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu0c, Ip_BFu33_BFu0c)
//============================================================================


struct  Ip_BFu33_BFu0i  {
  int *v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 Ip_BFu33_BFu0i) C1{ Fp FL:33 Fi:0}



static void Test_Ip_BFu33_BFu0i()
{
  {
    init_simple_test("Ip_BFu33_BFu0i");
    static STRUCT_IF_C Ip_BFu33_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu0i, Ip_BFu33_BFu0i)
//============================================================================


struct  Ip_BFu33_BFu0ll  {
  int *v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 Ip_BFu33_BFu0ll) C1{ Fp FL:33 FL:0}



static void Test_Ip_BFu33_BFu0ll()
{
  {
    init_simple_test("Ip_BFu33_BFu0ll");
    static STRUCT_IF_C Ip_BFu33_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu0ll, Ip_BFu33_BFu0ll)
//============================================================================


struct  Ip_BFu33_BFu0s  {
  int *v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 Ip_BFu33_BFu0s) C1{ Fp FL:33 Fs:0}



static void Test_Ip_BFu33_BFu0s()
{
  {
    init_simple_test("Ip_BFu33_BFu0s");
    static STRUCT_IF_C Ip_BFu33_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, 1, "Ip_BFu33_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "Ip_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu33_BFu0s, Ip_BFu33_BFu0s)
//============================================================================


struct  Ip_BFu7c_BFu0c  {
  int *v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 Ip_BFu7c_BFu0c) C1{ Fp Fc:7 Fc:0}



static void Test_Ip_BFu7c_BFu0c()
{
  {
    init_simple_test("Ip_BFu7c_BFu0c");
    static STRUCT_IF_C Ip_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu0c, Ip_BFu7c_BFu0c)
//============================================================================


struct  Ip_BFu7c_BFu0i  {
  int *v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 Ip_BFu7c_BFu0i) C1{ Fp Fc:7 Fi:0}



static void Test_Ip_BFu7c_BFu0i()
{
  {
    init_simple_test("Ip_BFu7c_BFu0i");
    static STRUCT_IF_C Ip_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu0i, Ip_BFu7c_BFu0i)
//============================================================================


struct  Ip_BFu7c_BFu0ll  {
  int *v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 Ip_BFu7c_BFu0ll) C1{ Fp Fc:7 FL:0}



static void Test_Ip_BFu7c_BFu0ll()
{
  {
    init_simple_test("Ip_BFu7c_BFu0ll");
    static STRUCT_IF_C Ip_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu0ll, Ip_BFu7c_BFu0ll)
//============================================================================


struct  Ip_BFu7c_BFu0s  {
  int *v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 Ip_BFu7c_BFu0s) C1{ Fp Fc:7 Fs:0}



static void Test_Ip_BFu7c_BFu0s()
{
  {
    init_simple_test("Ip_BFu7c_BFu0s");
    static STRUCT_IF_C Ip_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7c_BFu0s, Ip_BFu7c_BFu0s)
//============================================================================


struct  Ip_BFu7i_BFu0c  {
  int *v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 Ip_BFu7i_BFu0c) C1{ Fp Fi:7 Fc:0}



static void Test_Ip_BFu7i_BFu0c()
{
  {
    init_simple_test("Ip_BFu7i_BFu0c");
    static STRUCT_IF_C Ip_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu0c, Ip_BFu7i_BFu0c)
//============================================================================


struct  Ip_BFu7i_BFu0i  {
  int *v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 Ip_BFu7i_BFu0i) C1{ Fp Fi:7 Fi:0}



static void Test_Ip_BFu7i_BFu0i()
{
  {
    init_simple_test("Ip_BFu7i_BFu0i");
    static STRUCT_IF_C Ip_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu0i, Ip_BFu7i_BFu0i)
//============================================================================


struct  Ip_BFu7i_BFu0ll  {
  int *v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 Ip_BFu7i_BFu0ll) C1{ Fp Fi:7 FL:0}



static void Test_Ip_BFu7i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu7i_BFu0ll");
    static STRUCT_IF_C Ip_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu0ll, Ip_BFu7i_BFu0ll)
//============================================================================


struct  Ip_BFu7i_BFu0s  {
  int *v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 Ip_BFu7i_BFu0s) C1{ Fp Fi:7 Fs:0}



static void Test_Ip_BFu7i_BFu0s()
{
  {
    init_simple_test("Ip_BFu7i_BFu0s");
    static STRUCT_IF_C Ip_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7i_BFu0s, Ip_BFu7i_BFu0s)
//============================================================================


struct  Ip_BFu7ll_BFu0c  {
  int *v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 Ip_BFu7ll_BFu0c) C1{ Fp FL:7 Fc:0}



static void Test_Ip_BFu7ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu7ll_BFu0c");
    static STRUCT_IF_C Ip_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu0c, Ip_BFu7ll_BFu0c)
//============================================================================


struct  Ip_BFu7ll_BFu0i  {
  int *v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 Ip_BFu7ll_BFu0i) C1{ Fp FL:7 Fi:0}



static void Test_Ip_BFu7ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu7ll_BFu0i");
    static STRUCT_IF_C Ip_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu0i, Ip_BFu7ll_BFu0i)
//============================================================================


struct  Ip_BFu7ll_BFu0ll  {
  int *v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 Ip_BFu7ll_BFu0ll) C1{ Fp FL:7 FL:0}



static void Test_Ip_BFu7ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu7ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu0ll, Ip_BFu7ll_BFu0ll)
//============================================================================


struct  Ip_BFu7ll_BFu0s  {
  int *v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 Ip_BFu7ll_BFu0s) C1{ Fp FL:7 Fs:0}



static void Test_Ip_BFu7ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu7ll_BFu0s");
    static STRUCT_IF_C Ip_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7ll_BFu0s, Ip_BFu7ll_BFu0s)
//============================================================================


struct  Ip_BFu7s_BFu0c  {
  int *v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 Ip_BFu7s_BFu0c) C1{ Fp Fs:7 Fc:0}



static void Test_Ip_BFu7s_BFu0c()
{
  {
    init_simple_test("Ip_BFu7s_BFu0c");
    static STRUCT_IF_C Ip_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu0c, Ip_BFu7s_BFu0c)
//============================================================================


struct  Ip_BFu7s_BFu0i  {
  int *v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 Ip_BFu7s_BFu0i) C1{ Fp Fs:7 Fi:0}



static void Test_Ip_BFu7s_BFu0i()
{
  {
    init_simple_test("Ip_BFu7s_BFu0i");
    static STRUCT_IF_C Ip_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu0i, Ip_BFu7s_BFu0i)
//============================================================================


struct  Ip_BFu7s_BFu0ll  {
  int *v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 Ip_BFu7s_BFu0ll) C1{ Fp Fs:7 FL:0}



static void Test_Ip_BFu7s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu7s_BFu0ll");
    static STRUCT_IF_C Ip_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu0ll, Ip_BFu7s_BFu0ll)
//============================================================================


struct  Ip_BFu7s_BFu0s  {
  int *v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 Ip_BFu7s_BFu0s) C1{ Fp Fs:7 Fs:0}



static void Test_Ip_BFu7s_BFu0s()
{
  {
    init_simple_test("Ip_BFu7s_BFu0s");
    static STRUCT_IF_C Ip_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, 1, "Ip_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 7, hide_ull(1LL<<6), "Ip_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu7s_BFu0s, Ip_BFu7s_BFu0s)
//============================================================================


struct  Ip_BFu8c_BFu0c  {
  int *v1;
  unsigned char v2:8;
  unsigned char  :0;
};
//SIG(1 Ip_BFu8c_BFu0c) C1{ Fp Fc:8 Fc:0}



static void Test_Ip_BFu8c_BFu0c()
{
  {
    init_simple_test("Ip_BFu8c_BFu0c");
    static STRUCT_IF_C Ip_BFu8c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu0c, Ip_BFu8c_BFu0c)
//============================================================================


struct  Ip_BFu8c_BFu0i  {
  int *v1;
  unsigned char v2:8;
  unsigned int  :0;
};
//SIG(1 Ip_BFu8c_BFu0i) C1{ Fp Fc:8 Fi:0}



static void Test_Ip_BFu8c_BFu0i()
{
  {
    init_simple_test("Ip_BFu8c_BFu0i");
    static STRUCT_IF_C Ip_BFu8c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu0i, Ip_BFu8c_BFu0i)
//============================================================================


struct  Ip_BFu8c_BFu0ll  {
  int *v1;
  unsigned char v2:8;
  __tsu64  :0;
};
//SIG(1 Ip_BFu8c_BFu0ll) C1{ Fp Fc:8 FL:0}



static void Test_Ip_BFu8c_BFu0ll()
{
  {
    init_simple_test("Ip_BFu8c_BFu0ll");
    static STRUCT_IF_C Ip_BFu8c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu0ll, Ip_BFu8c_BFu0ll)
//============================================================================


struct  Ip_BFu8c_BFu0s  {
  int *v1;
  unsigned char v2:8;
  unsigned short  :0;
};
//SIG(1 Ip_BFu8c_BFu0s) C1{ Fp Fc:8 Fs:0}



static void Test_Ip_BFu8c_BFu0s()
{
  {
    init_simple_test("Ip_BFu8c_BFu0s");
    static STRUCT_IF_C Ip_BFu8c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8c_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8c_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8c_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8c_BFu0s, Ip_BFu8c_BFu0s)
//============================================================================


struct  Ip_BFu8i_BFu0c  {
  int *v1;
  unsigned int v2:8;
  unsigned char  :0;
};
//SIG(1 Ip_BFu8i_BFu0c) C1{ Fp Fi:8 Fc:0}



static void Test_Ip_BFu8i_BFu0c()
{
  {
    init_simple_test("Ip_BFu8i_BFu0c");
    static STRUCT_IF_C Ip_BFu8i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu0c, Ip_BFu8i_BFu0c)
//============================================================================


struct  Ip_BFu8i_BFu0i  {
  int *v1;
  unsigned int v2:8;
  unsigned int  :0;
};
//SIG(1 Ip_BFu8i_BFu0i) C1{ Fp Fi:8 Fi:0}



static void Test_Ip_BFu8i_BFu0i()
{
  {
    init_simple_test("Ip_BFu8i_BFu0i");
    static STRUCT_IF_C Ip_BFu8i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu0i, Ip_BFu8i_BFu0i)
//============================================================================


struct  Ip_BFu8i_BFu0ll  {
  int *v1;
  unsigned int v2:8;
  __tsu64  :0;
};
//SIG(1 Ip_BFu8i_BFu0ll) C1{ Fp Fi:8 FL:0}



static void Test_Ip_BFu8i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu8i_BFu0ll");
    static STRUCT_IF_C Ip_BFu8i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu0ll, Ip_BFu8i_BFu0ll)
//============================================================================


struct  Ip_BFu8i_BFu0s  {
  int *v1;
  unsigned int v2:8;
  unsigned short  :0;
};
//SIG(1 Ip_BFu8i_BFu0s) C1{ Fp Fi:8 Fs:0}



static void Test_Ip_BFu8i_BFu0s()
{
  {
    init_simple_test("Ip_BFu8i_BFu0s");
    static STRUCT_IF_C Ip_BFu8i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8i_BFu0s, Ip_BFu8i_BFu0s)
//============================================================================


struct  Ip_BFu8ll_BFu0c  {
  int *v1;
  __tsu64 v2:8;
  unsigned char  :0;
};
//SIG(1 Ip_BFu8ll_BFu0c) C1{ Fp FL:8 Fc:0}



static void Test_Ip_BFu8ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu8ll_BFu0c");
    static STRUCT_IF_C Ip_BFu8ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu0c, Ip_BFu8ll_BFu0c)
//============================================================================


struct  Ip_BFu8ll_BFu0i  {
  int *v1;
  __tsu64 v2:8;
  unsigned int  :0;
};
//SIG(1 Ip_BFu8ll_BFu0i) C1{ Fp FL:8 Fi:0}



static void Test_Ip_BFu8ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu8ll_BFu0i");
    static STRUCT_IF_C Ip_BFu8ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu0i, Ip_BFu8ll_BFu0i)
//============================================================================


struct  Ip_BFu8ll_BFu0ll  {
  int *v1;
  __tsu64 v2:8;
  __tsu64  :0;
};
//SIG(1 Ip_BFu8ll_BFu0ll) C1{ Fp FL:8 FL:0}



static void Test_Ip_BFu8ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu8ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu8ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu0ll, Ip_BFu8ll_BFu0ll)
//============================================================================


struct  Ip_BFu8ll_BFu0s  {
  int *v1;
  __tsu64 v2:8;
  unsigned short  :0;
};
//SIG(1 Ip_BFu8ll_BFu0s) C1{ Fp FL:8 Fs:0}



static void Test_Ip_BFu8ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu8ll_BFu0s");
    static STRUCT_IF_C Ip_BFu8ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8ll_BFu0s, Ip_BFu8ll_BFu0s)
//============================================================================


struct  Ip_BFu8s_BFu0c  {
  int *v1;
  unsigned short v2:8;
  unsigned char  :0;
};
//SIG(1 Ip_BFu8s_BFu0c) C1{ Fp Fs:8 Fc:0}



static void Test_Ip_BFu8s_BFu0c()
{
  {
    init_simple_test("Ip_BFu8s_BFu0c");
    static STRUCT_IF_C Ip_BFu8s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu0c, Ip_BFu8s_BFu0c)
//============================================================================


struct  Ip_BFu8s_BFu0i  {
  int *v1;
  unsigned short v2:8;
  unsigned int  :0;
};
//SIG(1 Ip_BFu8s_BFu0i) C1{ Fp Fs:8 Fi:0}



static void Test_Ip_BFu8s_BFu0i()
{
  {
    init_simple_test("Ip_BFu8s_BFu0i");
    static STRUCT_IF_C Ip_BFu8s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu0i, Ip_BFu8s_BFu0i)
//============================================================================


struct  Ip_BFu8s_BFu0ll  {
  int *v1;
  unsigned short v2:8;
  __tsu64  :0;
};
//SIG(1 Ip_BFu8s_BFu0ll) C1{ Fp Fs:8 FL:0}



static void Test_Ip_BFu8s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu8s_BFu0ll");
    static STRUCT_IF_C Ip_BFu8s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu0ll, Ip_BFu8s_BFu0ll)
//============================================================================


struct  Ip_BFu8s_BFu0s  {
  int *v1;
  unsigned short v2:8;
  unsigned short  :0;
};
//SIG(1 Ip_BFu8s_BFu0s) C1{ Fp Fs:8 Fs:0}



static void Test_Ip_BFu8s_BFu0s()
{
  {
    init_simple_test("Ip_BFu8s_BFu0s");
    static STRUCT_IF_C Ip_BFu8s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu8s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu8s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu8s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, 1, "Ip_BFu8s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 8, hide_ull(1LL<<7), "Ip_BFu8s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu8s_BFu0s, Ip_BFu8s_BFu0s)
//============================================================================


struct  Ip_BFu9i_BFu0c  {
  int *v1;
  unsigned int v2:9;
  unsigned char  :0;
};
//SIG(1 Ip_BFu9i_BFu0c) C1{ Fp Fi:9 Fc:0}



static void Test_Ip_BFu9i_BFu0c()
{
  {
    init_simple_test("Ip_BFu9i_BFu0c");
    static STRUCT_IF_C Ip_BFu9i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu0c, Ip_BFu9i_BFu0c)
//============================================================================


struct  Ip_BFu9i_BFu0i  {
  int *v1;
  unsigned int v2:9;
  unsigned int  :0;
};
//SIG(1 Ip_BFu9i_BFu0i) C1{ Fp Fi:9 Fi:0}



static void Test_Ip_BFu9i_BFu0i()
{
  {
    init_simple_test("Ip_BFu9i_BFu0i");
    static STRUCT_IF_C Ip_BFu9i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu0i, Ip_BFu9i_BFu0i)
//============================================================================


struct  Ip_BFu9i_BFu0ll  {
  int *v1;
  unsigned int v2:9;
  __tsu64  :0;
};
//SIG(1 Ip_BFu9i_BFu0ll) C1{ Fp Fi:9 FL:0}



static void Test_Ip_BFu9i_BFu0ll()
{
  {
    init_simple_test("Ip_BFu9i_BFu0ll");
    static STRUCT_IF_C Ip_BFu9i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu0ll, Ip_BFu9i_BFu0ll)
//============================================================================


struct  Ip_BFu9i_BFu0s  {
  int *v1;
  unsigned int v2:9;
  unsigned short  :0;
};
//SIG(1 Ip_BFu9i_BFu0s) C1{ Fp Fi:9 Fs:0}



static void Test_Ip_BFu9i_BFu0s()
{
  {
    init_simple_test("Ip_BFu9i_BFu0s");
    static STRUCT_IF_C Ip_BFu9i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9i_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9i_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9i_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9i_BFu0s, Ip_BFu9i_BFu0s)
//============================================================================


struct  Ip_BFu9ll_BFu0c  {
  int *v1;
  __tsu64 v2:9;
  unsigned char  :0;
};
//SIG(1 Ip_BFu9ll_BFu0c) C1{ Fp FL:9 Fc:0}



static void Test_Ip_BFu9ll_BFu0c()
{
  {
    init_simple_test("Ip_BFu9ll_BFu0c");
    static STRUCT_IF_C Ip_BFu9ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu0c, Ip_BFu9ll_BFu0c)
//============================================================================


struct  Ip_BFu9ll_BFu0i  {
  int *v1;
  __tsu64 v2:9;
  unsigned int  :0;
};
//SIG(1 Ip_BFu9ll_BFu0i) C1{ Fp FL:9 Fi:0}



static void Test_Ip_BFu9ll_BFu0i()
{
  {
    init_simple_test("Ip_BFu9ll_BFu0i");
    static STRUCT_IF_C Ip_BFu9ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu0i, Ip_BFu9ll_BFu0i)
//============================================================================


struct  Ip_BFu9ll_BFu0ll  {
  int *v1;
  __tsu64 v2:9;
  __tsu64  :0;
};
//SIG(1 Ip_BFu9ll_BFu0ll) C1{ Fp FL:9 FL:0}



static void Test_Ip_BFu9ll_BFu0ll()
{
  {
    init_simple_test("Ip_BFu9ll_BFu0ll");
    static STRUCT_IF_C Ip_BFu9ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu0ll, Ip_BFu9ll_BFu0ll)
//============================================================================


struct  Ip_BFu9ll_BFu0s  {
  int *v1;
  __tsu64 v2:9;
  unsigned short  :0;
};
//SIG(1 Ip_BFu9ll_BFu0s) C1{ Fp FL:9 Fs:0}



static void Test_Ip_BFu9ll_BFu0s()
{
  {
    init_simple_test("Ip_BFu9ll_BFu0s");
    static STRUCT_IF_C Ip_BFu9ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9ll_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9ll_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9ll_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9ll_BFu0s, Ip_BFu9ll_BFu0s)
//============================================================================


struct  Ip_BFu9s_BFu0c  {
  int *v1;
  unsigned short v2:9;
  unsigned char  :0;
};
//SIG(1 Ip_BFu9s_BFu0c) C1{ Fp Fs:9 Fc:0}



static void Test_Ip_BFu9s_BFu0c()
{
  {
    init_simple_test("Ip_BFu9s_BFu0c");
    static STRUCT_IF_C Ip_BFu9s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu0c.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu0c");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu0c, Ip_BFu9s_BFu0c)
//============================================================================


struct  Ip_BFu9s_BFu0i  {
  int *v1;
  unsigned short v2:9;
  unsigned int  :0;
};
//SIG(1 Ip_BFu9s_BFu0i) C1{ Fp Fs:9 Fi:0}



static void Test_Ip_BFu9s_BFu0i()
{
  {
    init_simple_test("Ip_BFu9s_BFu0i");
    static STRUCT_IF_C Ip_BFu9s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu0i.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu0i");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu0i, Ip_BFu9s_BFu0i)
//============================================================================


struct  Ip_BFu9s_BFu0ll  {
  int *v1;
  unsigned short v2:9;
  __tsu64  :0;
};
//SIG(1 Ip_BFu9s_BFu0ll) C1{ Fp Fs:9 FL:0}



static void Test_Ip_BFu9s_BFu0ll()
{
  {
    init_simple_test("Ip_BFu9s_BFu0ll");
    static STRUCT_IF_C Ip_BFu9s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu0ll.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu0ll");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu0ll, Ip_BFu9s_BFu0ll)
//============================================================================


struct  Ip_BFu9s_BFu0s  {
  int *v1;
  unsigned short v2:9;
  unsigned short  :0;
};
//SIG(1 Ip_BFu9s_BFu0s) C1{ Fp Fs:9 Fs:0}



static void Test_Ip_BFu9s_BFu0s()
{
  {
    init_simple_test("Ip_BFu9s_BFu0s");
    static STRUCT_IF_C Ip_BFu9s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_BFu9s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_BFu9s_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_BFu9s_BFu0s.v1");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, 1, "Ip_BFu9s_BFu0s");
    set_bf_and_test(lv, v2, ABISELECT(8,4), 0, 9, hide_ull(1LL<<8), "Ip_BFu9s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_BFu9s_BFu0s, Ip_BFu9s_BFu0s)
//============================================================================


struct  Ip_C_BFu0c  {
  int *v1;
  char v2;
  unsigned char  :0;
};
//SIG(1 Ip_C_BFu0c) C1{ Fp Fc Fc:0}



static void Test_Ip_C_BFu0c()
{
  {
    init_simple_test("Ip_C_BFu0c");
    static STRUCT_IF_C Ip_C_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu0c, Ip_C_BFu0c)
//============================================================================


struct  Ip_C_BFu0i  {
  int *v1;
  char v2;
  unsigned int  :0;
};
//SIG(1 Ip_C_BFu0i) C1{ Fp Fc Fi:0}



static void Test_Ip_C_BFu0i()
{
  {
    init_simple_test("Ip_C_BFu0i");
    static STRUCT_IF_C Ip_C_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu0i, Ip_C_BFu0i)
//============================================================================


struct  Ip_C_BFu0ll  {
  int *v1;
  char v2;
  __tsu64  :0;
};
//SIG(1 Ip_C_BFu0ll) C1{ Fp Fc FL:0}



static void Test_Ip_C_BFu0ll()
{
  {
    init_simple_test("Ip_C_BFu0ll");
    static STRUCT_IF_C Ip_C_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu0ll, Ip_C_BFu0ll)
//============================================================================


struct  Ip_C_BFu0s  {
  int *v1;
  char v2;
  unsigned short  :0;
};
//SIG(1 Ip_C_BFu0s) C1{ Fp Fc Fs:0}



static void Test_Ip_C_BFu0s()
{
  {
    init_simple_test("Ip_C_BFu0s");
    static STRUCT_IF_C Ip_C_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_C_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_C_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_C_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_C_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_C_BFu0s, Ip_C_BFu0s)
//============================================================================


struct  Ip_D_BFu0c  {
  int *v1;
  double v2;
  unsigned char  :0;
};
//SIG(1 Ip_D_BFu0c) C1{ Fp FL Fc:0}



static void Test_Ip_D_BFu0c()
{
  {
    init_simple_test("Ip_D_BFu0c");
    static STRUCT_IF_C Ip_D_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_D_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu0c, Ip_D_BFu0c)
//============================================================================


struct  Ip_D_BFu0i  {
  int *v1;
  double v2;
  unsigned int  :0;
};
//SIG(1 Ip_D_BFu0i) C1{ Fp FL Fi:0}



static void Test_Ip_D_BFu0i()
{
  {
    init_simple_test("Ip_D_BFu0i");
    static STRUCT_IF_C Ip_D_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_D_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu0i, Ip_D_BFu0i)
//============================================================================


struct  Ip_D_BFu0ll  {
  int *v1;
  double v2;
  __tsu64  :0;
};
//SIG(1 Ip_D_BFu0ll) C1{ Fp FL FL:0}



static void Test_Ip_D_BFu0ll()
{
  {
    init_simple_test("Ip_D_BFu0ll");
    static STRUCT_IF_C Ip_D_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_D_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu0ll, Ip_D_BFu0ll)
//============================================================================


struct  Ip_D_BFu0s  {
  int *v1;
  double v2;
  unsigned short  :0;
};
//SIG(1 Ip_D_BFu0s) C1{ Fp FL Fs:0}



static void Test_Ip_D_BFu0s()
{
  {
    init_simple_test("Ip_D_BFu0s");
    static STRUCT_IF_C Ip_D_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_D_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_D_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_D_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_D_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_D_BFu0s, Ip_D_BFu0s)
//============================================================================


struct  Ip_F_BFu0c  {
  int *v1;
  float v2;
  unsigned char  :0;
};
//SIG(1 Ip_F_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Ip_F_BFu0c()
{
  {
    init_simple_test("Ip_F_BFu0c");
    static STRUCT_IF_C Ip_F_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_F_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu0c, Ip_F_BFu0c)
//============================================================================


struct  Ip_F_BFu0i  {
  int *v1;
  float v2;
  unsigned int  :0;
};
//SIG(1 Ip_F_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Ip_F_BFu0i()
{
  {
    init_simple_test("Ip_F_BFu0i");
    static STRUCT_IF_C Ip_F_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_F_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu0i, Ip_F_BFu0i)
//============================================================================


struct  Ip_F_BFu0ll  {
  int *v1;
  float v2;
  __tsu64  :0;
};
//SIG(1 Ip_F_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Ip_F_BFu0ll()
{
  {
    init_simple_test("Ip_F_BFu0ll");
    static STRUCT_IF_C Ip_F_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_F_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu0ll, Ip_F_BFu0ll)
//============================================================================


struct  Ip_F_BFu0s  {
  int *v1;
  float v2;
  unsigned short  :0;
};
//SIG(1 Ip_F_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Ip_F_BFu0s()
{
  {
    init_simple_test("Ip_F_BFu0s");
    static STRUCT_IF_C Ip_F_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_F_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_F_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_F_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_F_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_F_BFu0s, Ip_F_BFu0s)
//============================================================================


struct  Ip_I_BFu0c  {
  int *v1;
  int v2;
  unsigned char  :0;
};
//SIG(1 Ip_I_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Ip_I_BFu0c()
{
  {
    init_simple_test("Ip_I_BFu0c");
    static STRUCT_IF_C Ip_I_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_I_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu0c, Ip_I_BFu0c)
//============================================================================


struct  Ip_I_BFu0i  {
  int *v1;
  int v2;
  unsigned int  :0;
};
//SIG(1 Ip_I_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Ip_I_BFu0i()
{
  {
    init_simple_test("Ip_I_BFu0i");
    static STRUCT_IF_C Ip_I_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_I_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu0i, Ip_I_BFu0i)
//============================================================================


struct  Ip_I_BFu0ll  {
  int *v1;
  int v2;
  __tsu64  :0;
};
//SIG(1 Ip_I_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Ip_I_BFu0ll()
{
  {
    init_simple_test("Ip_I_BFu0ll");
    static STRUCT_IF_C Ip_I_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_I_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu0ll, Ip_I_BFu0ll)
//============================================================================


struct  Ip_I_BFu0s  {
  int *v1;
  int v2;
  unsigned short  :0;
};
//SIG(1 Ip_I_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Ip_I_BFu0s()
{
  {
    init_simple_test("Ip_I_BFu0s");
    static STRUCT_IF_C Ip_I_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_I_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_I_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_I_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_I_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_I_BFu0s, Ip_I_BFu0s)
//============================================================================


struct  Ip_Ip_BFu0c  {
  int *v1;
  int *v2;
  unsigned char  :0;
};
//SIG(1 Ip_Ip_BFu0c) C1{ Fp[2] Fc:0}



static void Test_Ip_Ip_BFu0c()
{
  {
    init_simple_test("Ip_Ip_BFu0c");
    static STRUCT_IF_C Ip_Ip_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ip_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu0c, Ip_Ip_BFu0c)
//============================================================================


struct  Ip_Ip_BFu0i  {
  int *v1;
  int *v2;
  unsigned int  :0;
};
//SIG(1 Ip_Ip_BFu0i) C1{ Fp[2] Fi:0}



static void Test_Ip_Ip_BFu0i()
{
  {
    init_simple_test("Ip_Ip_BFu0i");
    static STRUCT_IF_C Ip_Ip_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ip_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu0i, Ip_Ip_BFu0i)
//============================================================================


struct  Ip_Ip_BFu0ll  {
  int *v1;
  int *v2;
  __tsu64  :0;
};
//SIG(1 Ip_Ip_BFu0ll) C1{ Fp[2] FL:0}



static void Test_Ip_Ip_BFu0ll()
{
  {
    init_simple_test("Ip_Ip_BFu0ll");
    static STRUCT_IF_C Ip_Ip_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ip_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu0ll, Ip_Ip_BFu0ll)
//============================================================================


struct  Ip_Ip_BFu0s  {
  int *v1;
  int *v2;
  unsigned short  :0;
};
//SIG(1 Ip_Ip_BFu0s) C1{ Fp[2] Fs:0}



static void Test_Ip_Ip_BFu0s()
{
  {
    init_simple_test("Ip_Ip_BFu0s");
    static STRUCT_IF_C Ip_Ip_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ip_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ip_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_Ip_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ip_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ip_BFu0s, Ip_Ip_BFu0s)
//============================================================================


struct  Ip_L_BFu0c  {
  int *v1;
  __tsi64 v2;
  unsigned char  :0;
};
//SIG(1 Ip_L_BFu0c) C1{ Fp FL Fc:0}



static void Test_Ip_L_BFu0c()
{
  {
    init_simple_test("Ip_L_BFu0c");
    static STRUCT_IF_C Ip_L_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu0c, Ip_L_BFu0c)
//============================================================================


struct  Ip_L_BFu0i  {
  int *v1;
  __tsi64 v2;
  unsigned int  :0;
};
//SIG(1 Ip_L_BFu0i) C1{ Fp FL Fi:0}



static void Test_Ip_L_BFu0i()
{
  {
    init_simple_test("Ip_L_BFu0i");
    static STRUCT_IF_C Ip_L_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu0i, Ip_L_BFu0i)
//============================================================================


struct  Ip_L_BFu0ll  {
  int *v1;
  __tsi64 v2;
  __tsu64  :0;
};
//SIG(1 Ip_L_BFu0ll) C1{ Fp FL FL:0}



static void Test_Ip_L_BFu0ll()
{
  {
    init_simple_test("Ip_L_BFu0ll");
    static STRUCT_IF_C Ip_L_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu0ll, Ip_L_BFu0ll)
//============================================================================


struct  Ip_L_BFu0s  {
  int *v1;
  __tsi64 v2;
  unsigned short  :0;
};
//SIG(1 Ip_L_BFu0s) C1{ Fp FL Fs:0}



static void Test_Ip_L_BFu0s()
{
  {
    init_simple_test("Ip_L_BFu0s");
    static STRUCT_IF_C Ip_L_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_L_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_L_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_L_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_L_BFu0s, Ip_L_BFu0s)
//============================================================================


struct  Ip_S_BFu0c  {
  int *v1;
  short v2;
  unsigned char  :0;
};
//SIG(1 Ip_S_BFu0c) C1{ Fp Fs Fc:0}



static void Test_Ip_S_BFu0c()
{
  {
    init_simple_test("Ip_S_BFu0c");
    static STRUCT_IF_C Ip_S_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu0c, Ip_S_BFu0c)
//============================================================================


struct  Ip_S_BFu0i  {
  int *v1;
  short v2;
  unsigned int  :0;
};
//SIG(1 Ip_S_BFu0i) C1{ Fp Fs Fi:0}



static void Test_Ip_S_BFu0i()
{
  {
    init_simple_test("Ip_S_BFu0i");
    static STRUCT_IF_C Ip_S_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu0i, Ip_S_BFu0i)
//============================================================================


struct  Ip_S_BFu0ll  {
  int *v1;
  short v2;
  __tsu64  :0;
};
//SIG(1 Ip_S_BFu0ll) C1{ Fp Fs FL:0}



static void Test_Ip_S_BFu0ll()
{
  {
    init_simple_test("Ip_S_BFu0ll");
    static STRUCT_IF_C Ip_S_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu0ll, Ip_S_BFu0ll)
//============================================================================


struct  Ip_S_BFu0s  {
  int *v1;
  short v2;
  unsigned short  :0;
};
//SIG(1 Ip_S_BFu0s) C1{ Fp Fs Fs:0}



static void Test_Ip_S_BFu0s()
{
  {
    init_simple_test("Ip_S_BFu0s");
    static STRUCT_IF_C Ip_S_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_S_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_S_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_S_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_S_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_S_BFu0s, Ip_S_BFu0s)
//============================================================================


struct  Ip_Uc_BFu0c  {
  int *v1;
  unsigned char v2;
  unsigned char  :0;
};
//SIG(1 Ip_Uc_BFu0c) C1{ Fp Fc Fc:0}



static void Test_Ip_Uc_BFu0c()
{
  {
    init_simple_test("Ip_Uc_BFu0c");
    static STRUCT_IF_C Ip_Uc_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu0c, Ip_Uc_BFu0c)
//============================================================================


struct  Ip_Uc_BFu0i  {
  int *v1;
  unsigned char v2;
  unsigned int  :0;
};
//SIG(1 Ip_Uc_BFu0i) C1{ Fp Fc Fi:0}



static void Test_Ip_Uc_BFu0i()
{
  {
    init_simple_test("Ip_Uc_BFu0i");
    static STRUCT_IF_C Ip_Uc_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu0i, Ip_Uc_BFu0i)
//============================================================================


struct  Ip_Uc_BFu0ll  {
  int *v1;
  unsigned char v2;
  __tsu64  :0;
};
//SIG(1 Ip_Uc_BFu0ll) C1{ Fp Fc FL:0}



static void Test_Ip_Uc_BFu0ll()
{
  {
    init_simple_test("Ip_Uc_BFu0ll");
    static STRUCT_IF_C Ip_Uc_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu0ll, Ip_Uc_BFu0ll)
//============================================================================


struct  Ip_Uc_BFu0s  {
  int *v1;
  unsigned char v2;
  unsigned short  :0;
};
//SIG(1 Ip_Uc_BFu0s) C1{ Fp Fc Fs:0}



static void Test_Ip_Uc_BFu0s()
{
  {
    init_simple_test("Ip_Uc_BFu0s");
    static STRUCT_IF_C Ip_Uc_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Uc_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Uc_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_Uc_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Uc_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Uc_BFu0s, Ip_Uc_BFu0s)
//============================================================================


struct  Ip_Ui_BFu0c  {
  int *v1;
  unsigned int v2;
  unsigned char  :0;
};
//SIG(1 Ip_Ui_BFu0c) C1{ Fp Fi Fc:0}



static void Test_Ip_Ui_BFu0c()
{
  {
    init_simple_test("Ip_Ui_BFu0c");
    static STRUCT_IF_C Ip_Ui_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ui_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu0c, Ip_Ui_BFu0c)
//============================================================================


struct  Ip_Ui_BFu0i  {
  int *v1;
  unsigned int v2;
  unsigned int  :0;
};
//SIG(1 Ip_Ui_BFu0i) C1{ Fp Fi Fi:0}



static void Test_Ip_Ui_BFu0i()
{
  {
    init_simple_test("Ip_Ui_BFu0i");
    static STRUCT_IF_C Ip_Ui_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ui_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu0i, Ip_Ui_BFu0i)
//============================================================================


struct  Ip_Ui_BFu0ll  {
  int *v1;
  unsigned int v2;
  __tsu64  :0;
};
//SIG(1 Ip_Ui_BFu0ll) C1{ Fp Fi FL:0}



static void Test_Ip_Ui_BFu0ll()
{
  {
    init_simple_test("Ip_Ui_BFu0ll");
    static STRUCT_IF_C Ip_Ui_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ui_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu0ll, Ip_Ui_BFu0ll)
//============================================================================


struct  Ip_Ui_BFu0s  {
  int *v1;
  unsigned int v2;
  unsigned short  :0;
};
//SIG(1 Ip_Ui_BFu0s) C1{ Fp Fi Fs:0}



static void Test_Ip_Ui_BFu0s()
{
  {
    init_simple_test("Ip_Ui_BFu0s");
    static STRUCT_IF_C Ip_Ui_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Ui_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ui_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_Ui_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ui_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ui_BFu0s, Ip_Ui_BFu0s)
//============================================================================


struct  Ip_Ul_BFu0c  {
  int *v1;
  __tsu64 v2;
  unsigned char  :0;
};
//SIG(1 Ip_Ul_BFu0c) C1{ Fp FL Fc:0}



static void Test_Ip_Ul_BFu0c()
{
  {
    init_simple_test("Ip_Ul_BFu0c");
    static STRUCT_IF_C Ip_Ul_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ul_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu0c, Ip_Ul_BFu0c)
//============================================================================


struct  Ip_Ul_BFu0i  {
  int *v1;
  __tsu64 v2;
  unsigned int  :0;
};
//SIG(1 Ip_Ul_BFu0i) C1{ Fp FL Fi:0}



static void Test_Ip_Ul_BFu0i()
{
  {
    init_simple_test("Ip_Ul_BFu0i");
    static STRUCT_IF_C Ip_Ul_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ul_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu0i, Ip_Ul_BFu0i)
//============================================================================


struct  Ip_Ul_BFu0ll  {
  int *v1;
  __tsu64 v2;
  __tsu64  :0;
};
//SIG(1 Ip_Ul_BFu0ll) C1{ Fp FL FL:0}



static void Test_Ip_Ul_BFu0ll()
{
  {
    init_simple_test("Ip_Ul_BFu0ll");
    static STRUCT_IF_C Ip_Ul_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ul_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu0ll, Ip_Ul_BFu0ll)
//============================================================================


struct  Ip_Ul_BFu0s  {
  int *v1;
  __tsu64 v2;
  unsigned short  :0;
};
//SIG(1 Ip_Ul_BFu0s) C1{ Fp FL Fs:0}



static void Test_Ip_Ul_BFu0s()
{
  {
    init_simple_test("Ip_Ul_BFu0s");
    static STRUCT_IF_C Ip_Ul_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(Ip_Ul_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Ul_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_Ul_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Ul_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Ul_BFu0s, Ip_Ul_BFu0s)
//============================================================================


struct  Ip_Us_BFu0c  {
  int *v1;
  unsigned short v2;
  unsigned char  :0;
};
//SIG(1 Ip_Us_BFu0c) C1{ Fp Fs Fc:0}



static void Test_Ip_Us_BFu0c()
{
  {
    init_simple_test("Ip_Us_BFu0c");
    static STRUCT_IF_C Ip_Us_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu0c, Ip_Us_BFu0c)
//============================================================================


struct  Ip_Us_BFu0i  {
  int *v1;
  unsigned short v2;
  unsigned int  :0;
};
//SIG(1 Ip_Us_BFu0i) C1{ Fp Fs Fi:0}



static void Test_Ip_Us_BFu0i()
{
  {
    init_simple_test("Ip_Us_BFu0i");
    static STRUCT_IF_C Ip_Us_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu0i, Ip_Us_BFu0i)
//============================================================================


struct  Ip_Us_BFu0ll  {
  int *v1;
  unsigned short v2;
  __tsu64  :0;
};
//SIG(1 Ip_Us_BFu0ll) C1{ Fp Fs FL:0}



static void Test_Ip_Us_BFu0ll()
{
  {
    init_simple_test("Ip_Us_BFu0ll");
    static STRUCT_IF_C Ip_Us_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu0ll, Ip_Us_BFu0ll)
//============================================================================


struct  Ip_Us_BFu0s  {
  int *v1;
  unsigned short v2;
  unsigned short  :0;
};
//SIG(1 Ip_Us_BFu0s) C1{ Fp Fs Fs:0}



static void Test_Ip_Us_BFu0s()
{
  {
    init_simple_test("Ip_Us_BFu0s");
    static STRUCT_IF_C Ip_Us_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Us_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Us_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_Us_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Us_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Us_BFu0s, Ip_Us_BFu0s)
//============================================================================


struct  Ip_Vp_BFu0c  {
  int *v1;
  void *v2;
  unsigned char  :0;
};
//SIG(1 Ip_Vp_BFu0c) C1{ Fp[2] Fc:0}



static void Test_Ip_Vp_BFu0c()
{
  {
    init_simple_test("Ip_Vp_BFu0c");
    static STRUCT_IF_C Ip_Vp_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Vp_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu0c)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu0c.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu0c.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu0c, Ip_Vp_BFu0c)
//============================================================================


struct  Ip_Vp_BFu0i  {
  int *v1;
  void *v2;
  unsigned int  :0;
};
//SIG(1 Ip_Vp_BFu0i) C1{ Fp[2] Fi:0}



static void Test_Ip_Vp_BFu0i()
{
  {
    init_simple_test("Ip_Vp_BFu0i");
    static STRUCT_IF_C Ip_Vp_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Vp_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu0i)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu0i.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu0i.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu0i, Ip_Vp_BFu0i)
//============================================================================


struct  Ip_Vp_BFu0ll  {
  int *v1;
  void *v2;
  __tsu64  :0;
};
//SIG(1 Ip_Vp_BFu0ll) C1{ Fp[2] FL:0}



static void Test_Ip_Vp_BFu0ll()
{
  {
    init_simple_test("Ip_Vp_BFu0ll");
    static STRUCT_IF_C Ip_Vp_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Vp_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu0ll)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu0ll.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu0ll.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu0ll, Ip_Vp_BFu0ll)
//============================================================================


struct  Ip_Vp_BFu0s  {
  int *v1;
  void *v2;
  unsigned short  :0;
};
//SIG(1 Ip_Vp_BFu0s) C1{ Fp[2] Fs:0}



static void Test_Ip_Vp_BFu0s()
{
  {
    init_simple_test("Ip_Vp_BFu0s");
    static STRUCT_IF_C Ip_Vp_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(Ip_Vp_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(Ip_Vp_BFu0s)");
    check_field_offset(lv, v1, 0, "Ip_Vp_BFu0s.v1");
    check_field_offset(lv, v2, ABISELECT(8,4), "Ip_Vp_BFu0s.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_Ip_Vp_BFu0s, Ip_Vp_BFu0s)
//============================================================================


struct  L_BFu0c  {
  __tsi64 v1;
  unsigned char  :0;
};
//SIG(1 L_BFu0c) C1{ FL Fc:0}



static void Test_L_BFu0c()
{
  {
    init_simple_test("L_BFu0c");
    static STRUCT_IF_C L_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c, L_BFu0c)
//============================================================================


struct  L_BFu0c_BFu0c  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned char  :0;
};
//SIG(1 L_BFu0c_BFu0c) C1{ FL Fc:0 Fc:0}



static void Test_L_BFu0c_BFu0c()
{
  {
    init_simple_test("L_BFu0c_BFu0c");
    static STRUCT_IF_C L_BFu0c_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu0c, L_BFu0c_BFu0c)
//============================================================================


struct  L_BFu0c_BFu0i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int  :0;
};
//SIG(1 L_BFu0c_BFu0i) C1{ FL Fc:0 Fi:0}



static void Test_L_BFu0c_BFu0i()
{
  {
    init_simple_test("L_BFu0c_BFu0i");
    static STRUCT_IF_C L_BFu0c_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu0i, L_BFu0c_BFu0i)
//============================================================================


struct  L_BFu0c_BFu0ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64  :0;
};
//SIG(1 L_BFu0c_BFu0ll) C1{ FL Fc:0 FL:0}



static void Test_L_BFu0c_BFu0ll()
{
  {
    init_simple_test("L_BFu0c_BFu0ll");
    static STRUCT_IF_C L_BFu0c_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu0ll, L_BFu0c_BFu0ll)
//============================================================================


struct  L_BFu0c_BFu0s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short  :0;
};
//SIG(1 L_BFu0c_BFu0s) C1{ FL Fc:0 Fs:0}



static void Test_L_BFu0c_BFu0s()
{
  {
    init_simple_test("L_BFu0c_BFu0s");
    static STRUCT_IF_C L_BFu0c_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu0s, L_BFu0c_BFu0s)
//============================================================================


struct  L_BFu0c_BFu15i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:15;
};
//SIG(1 L_BFu0c_BFu15i) C1{ FL Fc:0 Fi:15}



static void Test_L_BFu0c_BFu15i()
{
  {
    init_simple_test("L_BFu0c_BFu15i");
    static STRUCT_IF_C L_BFu0c_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0c_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu15i, L_BFu0c_BFu15i)
//============================================================================


struct  L_BFu0c_BFu15ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:15;
};
//SIG(1 L_BFu0c_BFu15ll) C1{ FL Fc:0 FL:15}



static void Test_L_BFu0c_BFu15ll()
{
  {
    init_simple_test("L_BFu0c_BFu15ll");
    static STRUCT_IF_C L_BFu0c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0c_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu15ll, L_BFu0c_BFu15ll)
//============================================================================


struct  L_BFu0c_BFu15s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2:15;
};
//SIG(1 L_BFu0c_BFu15s) C1{ FL Fc:0 Fs:15}



static void Test_L_BFu0c_BFu15s()
{
  {
    init_simple_test("L_BFu0c_BFu15s");
    static STRUCT_IF_C L_BFu0c_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0c_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu15s, L_BFu0c_BFu15s)
//============================================================================


struct  L_BFu0c_BFu16i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:16;
};
//SIG(1 L_BFu0c_BFu16i) C1{ FL Fc:0 Fi:16}



static void Test_L_BFu0c_BFu16i()
{
  {
    init_simple_test("L_BFu0c_BFu16i");
    static STRUCT_IF_C L_BFu0c_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0c_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu16i, L_BFu0c_BFu16i)
//============================================================================


struct  L_BFu0c_BFu16ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:16;
};
//SIG(1 L_BFu0c_BFu16ll) C1{ FL Fc:0 FL:16}



static void Test_L_BFu0c_BFu16ll()
{
  {
    init_simple_test("L_BFu0c_BFu16ll");
    static STRUCT_IF_C L_BFu0c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0c_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu16ll, L_BFu0c_BFu16ll)
//============================================================================


struct  L_BFu0c_BFu16s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2:16;
};
//SIG(1 L_BFu0c_BFu16s) C1{ FL Fc:0 Fs:16}



static void Test_L_BFu0c_BFu16s()
{
  {
    init_simple_test("L_BFu0c_BFu16s");
    static STRUCT_IF_C L_BFu0c_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0c_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu16s, L_BFu0c_BFu16s)
//============================================================================


struct  L_BFu0c_BFu17i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:17;
};
//SIG(1 L_BFu0c_BFu17i) C1{ FL Fc:0 Fi:17}



static void Test_L_BFu0c_BFu17i()
{
  {
    init_simple_test("L_BFu0c_BFu17i");
    static STRUCT_IF_C L_BFu0c_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0c_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu17i, L_BFu0c_BFu17i)
//============================================================================


struct  L_BFu0c_BFu17ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:17;
};
//SIG(1 L_BFu0c_BFu17ll) C1{ FL Fc:0 FL:17}



static void Test_L_BFu0c_BFu17ll()
{
  {
    init_simple_test("L_BFu0c_BFu17ll");
    static STRUCT_IF_C L_BFu0c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0c_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu17ll, L_BFu0c_BFu17ll)
//============================================================================


struct  L_BFu0c_BFu1c  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned char v2:1;
};
//SIG(1 L_BFu0c_BFu1c) C1{ FL Fc:0 Fc:1}



static void Test_L_BFu0c_BFu1c()
{
  {
    init_simple_test("L_BFu0c_BFu1c");
    static STRUCT_IF_C L_BFu0c_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu1c, L_BFu0c_BFu1c)
//============================================================================


struct  L_BFu0c_BFu1i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:1;
};
//SIG(1 L_BFu0c_BFu1i) C1{ FL Fc:0 Fi:1}



static void Test_L_BFu0c_BFu1i()
{
  {
    init_simple_test("L_BFu0c_BFu1i");
    static STRUCT_IF_C L_BFu0c_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu1i, L_BFu0c_BFu1i)
//============================================================================


struct  L_BFu0c_BFu1ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:1;
};
//SIG(1 L_BFu0c_BFu1ll) C1{ FL Fc:0 FL:1}



static void Test_L_BFu0c_BFu1ll()
{
  {
    init_simple_test("L_BFu0c_BFu1ll");
    static STRUCT_IF_C L_BFu0c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu1ll, L_BFu0c_BFu1ll)
//============================================================================


struct  L_BFu0c_BFu1s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2:1;
};
//SIG(1 L_BFu0c_BFu1s) C1{ FL Fc:0 Fs:1}



static void Test_L_BFu0c_BFu1s()
{
  {
    init_simple_test("L_BFu0c_BFu1s");
    static STRUCT_IF_C L_BFu0c_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu1s, L_BFu0c_BFu1s)
//============================================================================


struct  L_BFu0c_BFu31i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:31;
};
//SIG(1 L_BFu0c_BFu31i) C1{ FL Fc:0 Fi:31}



static void Test_L_BFu0c_BFu31i()
{
  {
    init_simple_test("L_BFu0c_BFu31i");
    static STRUCT_IF_C L_BFu0c_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0c_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu31i, L_BFu0c_BFu31i)
//============================================================================


struct  L_BFu0c_BFu31ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:31;
};
//SIG(1 L_BFu0c_BFu31ll) C1{ FL Fc:0 FL:31}



static void Test_L_BFu0c_BFu31ll()
{
  {
    init_simple_test("L_BFu0c_BFu31ll");
    static STRUCT_IF_C L_BFu0c_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0c_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu31ll, L_BFu0c_BFu31ll)
//============================================================================


struct  L_BFu0c_BFu32i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:32;
};
//SIG(1 L_BFu0c_BFu32i) C1{ FL Fc:0 Fi:32}



static void Test_L_BFu0c_BFu32i()
{
  {
    init_simple_test("L_BFu0c_BFu32i");
    static STRUCT_IF_C L_BFu0c_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0c_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu32i, L_BFu0c_BFu32i)
//============================================================================


struct  L_BFu0c_BFu32ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:32;
};
//SIG(1 L_BFu0c_BFu32ll) C1{ FL Fc:0 FL:32}



static void Test_L_BFu0c_BFu32ll()
{
  {
    init_simple_test("L_BFu0c_BFu32ll");
    static STRUCT_IF_C L_BFu0c_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0c_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu32ll, L_BFu0c_BFu32ll)
//============================================================================


struct  L_BFu0c_BFu33  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:33;
};
//SIG(1 L_BFu0c_BFu33) C1{ FL Fc:0 FL:33}



static void Test_L_BFu0c_BFu33()
{
  {
    init_simple_test("L_BFu0c_BFu33");
    static STRUCT_IF_C L_BFu0c_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu0c_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu0c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu33, L_BFu0c_BFu33)
//============================================================================


struct  L_BFu0c_BFu7c  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned char v2:7;
};
//SIG(1 L_BFu0c_BFu7c) C1{ FL Fc:0 Fc:7}



static void Test_L_BFu0c_BFu7c()
{
  {
    init_simple_test("L_BFu0c_BFu7c");
    static STRUCT_IF_C L_BFu0c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0c_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu7c, L_BFu0c_BFu7c)
//============================================================================


struct  L_BFu0c_BFu7i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:7;
};
//SIG(1 L_BFu0c_BFu7i) C1{ FL Fc:0 Fi:7}



static void Test_L_BFu0c_BFu7i()
{
  {
    init_simple_test("L_BFu0c_BFu7i");
    static STRUCT_IF_C L_BFu0c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0c_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu7i, L_BFu0c_BFu7i)
//============================================================================


struct  L_BFu0c_BFu7ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:7;
};
//SIG(1 L_BFu0c_BFu7ll) C1{ FL Fc:0 FL:7}



static void Test_L_BFu0c_BFu7ll()
{
  {
    init_simple_test("L_BFu0c_BFu7ll");
    static STRUCT_IF_C L_BFu0c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0c_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu7ll, L_BFu0c_BFu7ll)
//============================================================================


struct  L_BFu0c_BFu7s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2:7;
};
//SIG(1 L_BFu0c_BFu7s) C1{ FL Fc:0 Fs:7}



static void Test_L_BFu0c_BFu7s()
{
  {
    init_simple_test("L_BFu0c_BFu7s");
    static STRUCT_IF_C L_BFu0c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0c_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu7s, L_BFu0c_BFu7s)
//============================================================================


struct  L_BFu0c_BFu8c  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned char v2:8;
};
//SIG(1 L_BFu0c_BFu8c) C1{ FL Fc:0 Fc:8}



static void Test_L_BFu0c_BFu8c()
{
  {
    init_simple_test("L_BFu0c_BFu8c");
    static STRUCT_IF_C L_BFu0c_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0c_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu8c, L_BFu0c_BFu8c)
//============================================================================


struct  L_BFu0c_BFu8i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:8;
};
//SIG(1 L_BFu0c_BFu8i) C1{ FL Fc:0 Fi:8}



static void Test_L_BFu0c_BFu8i()
{
  {
    init_simple_test("L_BFu0c_BFu8i");
    static STRUCT_IF_C L_BFu0c_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0c_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu8i, L_BFu0c_BFu8i)
//============================================================================


struct  L_BFu0c_BFu8ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:8;
};
//SIG(1 L_BFu0c_BFu8ll) C1{ FL Fc:0 FL:8}



static void Test_L_BFu0c_BFu8ll()
{
  {
    init_simple_test("L_BFu0c_BFu8ll");
    static STRUCT_IF_C L_BFu0c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0c_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu8ll, L_BFu0c_BFu8ll)
//============================================================================


struct  L_BFu0c_BFu8s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2:8;
};
//SIG(1 L_BFu0c_BFu8s) C1{ FL Fc:0 Fs:8}



static void Test_L_BFu0c_BFu8s()
{
  {
    init_simple_test("L_BFu0c_BFu8s");
    static STRUCT_IF_C L_BFu0c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0c_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu8s, L_BFu0c_BFu8s)
//============================================================================


struct  L_BFu0c_BFu9i  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2:9;
};
//SIG(1 L_BFu0c_BFu9i) C1{ FL Fc:0 Fi:9}



static void Test_L_BFu0c_BFu9i()
{
  {
    init_simple_test("L_BFu0c_BFu9i");
    static STRUCT_IF_C L_BFu0c_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0c_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu9i, L_BFu0c_BFu9i)
//============================================================================


struct  L_BFu0c_BFu9ll  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2:9;
};
//SIG(1 L_BFu0c_BFu9ll) C1{ FL Fc:0 FL:9}



static void Test_L_BFu0c_BFu9ll()
{
  {
    init_simple_test("L_BFu0c_BFu9ll");
    static STRUCT_IF_C L_BFu0c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0c_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu9ll, L_BFu0c_BFu9ll)
//============================================================================


struct  L_BFu0c_BFu9s  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2:9;
};
//SIG(1 L_BFu0c_BFu9s) C1{ FL Fc:0 Fs:9}



static void Test_L_BFu0c_BFu9s()
{
  {
    init_simple_test("L_BFu0c_BFu9s");
    static STRUCT_IF_C L_BFu0c_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu0c_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0c_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_BFu9s, L_BFu0c_BFu9s)
//============================================================================


struct  L_BFu0c_C  {
  __tsi64 v1;
  unsigned char  :0;
  char v2;
};
//SIG(1 L_BFu0c_C) C1{ FL Fc:0 Fc}



static void Test_L_BFu0c_C()
{
  {
    init_simple_test("L_BFu0c_C");
    static STRUCT_IF_C L_BFu0c_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_C)");
    check_field_offset(lv, v1, 0, "L_BFu0c_C.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_C, L_BFu0c_C)
//============================================================================


struct  L_BFu0c_D  {
  __tsi64 v1;
  unsigned char  :0;
  double v2;
};
//SIG(1 L_BFu0c_D) C1{ FL Fc:0 FL}



static void Test_L_BFu0c_D()
{
  {
    init_simple_test("L_BFu0c_D");
    static STRUCT_IF_C L_BFu0c_D lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_D)");
    check_field_offset(lv, v1, 0, "L_BFu0c_D.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_D, L_BFu0c_D)
//============================================================================


struct  L_BFu0c_F  {
  __tsi64 v1;
  unsigned char  :0;
  float v2;
};
//SIG(1 L_BFu0c_F) C1{ FL Fc:0 Fi}



static void Test_L_BFu0c_F()
{
  {
    init_simple_test("L_BFu0c_F");
    static STRUCT_IF_C L_BFu0c_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_F)");
    check_field_offset(lv, v1, 0, "L_BFu0c_F.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_F, L_BFu0c_F)
//============================================================================


struct  L_BFu0c_I  {
  __tsi64 v1;
  unsigned char  :0;
  int v2;
};
//SIG(1 L_BFu0c_I) C1{ FL Fc:0 Fi}



static void Test_L_BFu0c_I()
{
  {
    init_simple_test("L_BFu0c_I");
    static STRUCT_IF_C L_BFu0c_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_I)");
    check_field_offset(lv, v1, 0, "L_BFu0c_I.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_I, L_BFu0c_I)
//============================================================================


struct  L_BFu0c_Ip  {
  __tsi64 v1;
  unsigned char  :0;
  int *v2;
};
//SIG(1 L_BFu0c_Ip) C1{ FL Fc:0 Fp}



static void Test_L_BFu0c_Ip()
{
  {
    init_simple_test("L_BFu0c_Ip");
    static STRUCT_IF_C L_BFu0c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu0c_Ip.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_Ip, L_BFu0c_Ip)
//============================================================================


struct  L_BFu0c_L  {
  __tsi64 v1;
  unsigned char  :0;
  __tsi64 v2;
};
//SIG(1 L_BFu0c_L) C1{ FL Fc:0 FL}



static void Test_L_BFu0c_L()
{
  {
    init_simple_test("L_BFu0c_L");
    static STRUCT_IF_C L_BFu0c_L lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_L)");
    check_field_offset(lv, v1, 0, "L_BFu0c_L.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_L, L_BFu0c_L)
//============================================================================


struct  L_BFu0c_S  {
  __tsi64 v1;
  unsigned char  :0;
  short v2;
};
//SIG(1 L_BFu0c_S) C1{ FL Fc:0 Fs}



static void Test_L_BFu0c_S()
{
  {
    init_simple_test("L_BFu0c_S");
    static STRUCT_IF_C L_BFu0c_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_S)");
    check_field_offset(lv, v1, 0, "L_BFu0c_S.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_S, L_BFu0c_S)
//============================================================================


struct  L_BFu0c_Uc  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned char v2;
};
//SIG(1 L_BFu0c_Uc) C1{ FL Fc:0 Fc}



static void Test_L_BFu0c_Uc()
{
  {
    init_simple_test("L_BFu0c_Uc");
    static STRUCT_IF_C L_BFu0c_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu0c_Uc.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_Uc, L_BFu0c_Uc)
//============================================================================


struct  L_BFu0c_Ui  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned int v2;
};
//SIG(1 L_BFu0c_Ui) C1{ FL Fc:0 Fi}



static void Test_L_BFu0c_Ui()
{
  {
    init_simple_test("L_BFu0c_Ui");
    static STRUCT_IF_C L_BFu0c_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu0c_Ui.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_Ui, L_BFu0c_Ui)
//============================================================================


struct  L_BFu0c_Ul  {
  __tsi64 v1;
  unsigned char  :0;
  __tsu64 v2;
};
//SIG(1 L_BFu0c_Ul) C1{ FL Fc:0 FL}



static void Test_L_BFu0c_Ul()
{
  {
    init_simple_test("L_BFu0c_Ul");
    static STRUCT_IF_C L_BFu0c_Ul lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu0c_Ul.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_Ul, L_BFu0c_Ul)
//============================================================================


struct  L_BFu0c_Us  {
  __tsi64 v1;
  unsigned char  :0;
  unsigned short v2;
};
//SIG(1 L_BFu0c_Us) C1{ FL Fc:0 Fs}



static void Test_L_BFu0c_Us()
{
  {
    init_simple_test("L_BFu0c_Us");
    static STRUCT_IF_C L_BFu0c_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_Us)");
    check_field_offset(lv, v1, 0, "L_BFu0c_Us.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_Us, L_BFu0c_Us)
//============================================================================


struct  L_BFu0c_Vp  {
  __tsi64 v1;
  unsigned char  :0;
  void *v2;
};
//SIG(1 L_BFu0c_Vp) C1{ FL Fc:0 Fp}



static void Test_L_BFu0c_Vp()
{
  {
    init_simple_test("L_BFu0c_Vp");
    static STRUCT_IF_C L_BFu0c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0c_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu0c_Vp.v1");
    check_field_offset(lv, v2, 8, "L_BFu0c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0c_Vp, L_BFu0c_Vp)
//============================================================================


struct  L_BFu0i  {
  __tsi64 v1;
  unsigned int  :0;
};
//SIG(1 L_BFu0i) C1{ FL Fi:0}



static void Test_L_BFu0i()
{
  {
    init_simple_test("L_BFu0i");
    static STRUCT_IF_C L_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i, L_BFu0i)
//============================================================================


struct  L_BFu0i_BFu0c  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned char  :0;
};
//SIG(1 L_BFu0i_BFu0c) C1{ FL Fi:0 Fc:0}



static void Test_L_BFu0i_BFu0c()
{
  {
    init_simple_test("L_BFu0i_BFu0c");
    static STRUCT_IF_C L_BFu0i_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu0c, L_BFu0i_BFu0c)
//============================================================================


struct  L_BFu0i_BFu0i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int  :0;
};
//SIG(1 L_BFu0i_BFu0i) C1{ FL Fi:0 Fi:0}



static void Test_L_BFu0i_BFu0i()
{
  {
    init_simple_test("L_BFu0i_BFu0i");
    static STRUCT_IF_C L_BFu0i_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu0i, L_BFu0i_BFu0i)
//============================================================================


struct  L_BFu0i_BFu0ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64  :0;
};
//SIG(1 L_BFu0i_BFu0ll) C1{ FL Fi:0 FL:0}



static void Test_L_BFu0i_BFu0ll()
{
  {
    init_simple_test("L_BFu0i_BFu0ll");
    static STRUCT_IF_C L_BFu0i_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu0ll, L_BFu0i_BFu0ll)
//============================================================================


struct  L_BFu0i_BFu0s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short  :0;
};
//SIG(1 L_BFu0i_BFu0s) C1{ FL Fi:0 Fs:0}



static void Test_L_BFu0i_BFu0s()
{
  {
    init_simple_test("L_BFu0i_BFu0s");
    static STRUCT_IF_C L_BFu0i_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu0s, L_BFu0i_BFu0s)
//============================================================================


struct  L_BFu0i_BFu15i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:15;
};
//SIG(1 L_BFu0i_BFu15i) C1{ FL Fi:0 Fi:15}



static void Test_L_BFu0i_BFu15i()
{
  {
    init_simple_test("L_BFu0i_BFu15i");
    static STRUCT_IF_C L_BFu0i_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0i_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu15i, L_BFu0i_BFu15i)
//============================================================================


struct  L_BFu0i_BFu15ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:15;
};
//SIG(1 L_BFu0i_BFu15ll) C1{ FL Fi:0 FL:15}



static void Test_L_BFu0i_BFu15ll()
{
  {
    init_simple_test("L_BFu0i_BFu15ll");
    static STRUCT_IF_C L_BFu0i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0i_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu15ll, L_BFu0i_BFu15ll)
//============================================================================


struct  L_BFu0i_BFu15s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2:15;
};
//SIG(1 L_BFu0i_BFu15s) C1{ FL Fi:0 Fs:15}



static void Test_L_BFu0i_BFu15s()
{
  {
    init_simple_test("L_BFu0i_BFu15s");
    static STRUCT_IF_C L_BFu0i_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0i_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu15s, L_BFu0i_BFu15s)
//============================================================================


struct  L_BFu0i_BFu16i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:16;
};
//SIG(1 L_BFu0i_BFu16i) C1{ FL Fi:0 Fi:16}



static void Test_L_BFu0i_BFu16i()
{
  {
    init_simple_test("L_BFu0i_BFu16i");
    static STRUCT_IF_C L_BFu0i_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0i_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu16i, L_BFu0i_BFu16i)
//============================================================================


struct  L_BFu0i_BFu16ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:16;
};
//SIG(1 L_BFu0i_BFu16ll) C1{ FL Fi:0 FL:16}



static void Test_L_BFu0i_BFu16ll()
{
  {
    init_simple_test("L_BFu0i_BFu16ll");
    static STRUCT_IF_C L_BFu0i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0i_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu16ll, L_BFu0i_BFu16ll)
//============================================================================


struct  L_BFu0i_BFu16s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2:16;
};
//SIG(1 L_BFu0i_BFu16s) C1{ FL Fi:0 Fs:16}



static void Test_L_BFu0i_BFu16s()
{
  {
    init_simple_test("L_BFu0i_BFu16s");
    static STRUCT_IF_C L_BFu0i_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0i_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu16s, L_BFu0i_BFu16s)
//============================================================================


struct  L_BFu0i_BFu17i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:17;
};
//SIG(1 L_BFu0i_BFu17i) C1{ FL Fi:0 Fi:17}



static void Test_L_BFu0i_BFu17i()
{
  {
    init_simple_test("L_BFu0i_BFu17i");
    static STRUCT_IF_C L_BFu0i_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0i_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu17i, L_BFu0i_BFu17i)
//============================================================================


struct  L_BFu0i_BFu17ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:17;
};
//SIG(1 L_BFu0i_BFu17ll) C1{ FL Fi:0 FL:17}



static void Test_L_BFu0i_BFu17ll()
{
  {
    init_simple_test("L_BFu0i_BFu17ll");
    static STRUCT_IF_C L_BFu0i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0i_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu17ll, L_BFu0i_BFu17ll)
//============================================================================


struct  L_BFu0i_BFu1c  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned char v2:1;
};
//SIG(1 L_BFu0i_BFu1c) C1{ FL Fi:0 Fc:1}



static void Test_L_BFu0i_BFu1c()
{
  {
    init_simple_test("L_BFu0i_BFu1c");
    static STRUCT_IF_C L_BFu0i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu1c, L_BFu0i_BFu1c)
//============================================================================


struct  L_BFu0i_BFu1i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:1;
};
//SIG(1 L_BFu0i_BFu1i) C1{ FL Fi:0 Fi:1}



static void Test_L_BFu0i_BFu1i()
{
  {
    init_simple_test("L_BFu0i_BFu1i");
    static STRUCT_IF_C L_BFu0i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu1i, L_BFu0i_BFu1i)
//============================================================================


struct  L_BFu0i_BFu1ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:1;
};
//SIG(1 L_BFu0i_BFu1ll) C1{ FL Fi:0 FL:1}



static void Test_L_BFu0i_BFu1ll()
{
  {
    init_simple_test("L_BFu0i_BFu1ll");
    static STRUCT_IF_C L_BFu0i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu1ll, L_BFu0i_BFu1ll)
//============================================================================


struct  L_BFu0i_BFu1s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2:1;
};
//SIG(1 L_BFu0i_BFu1s) C1{ FL Fi:0 Fs:1}



static void Test_L_BFu0i_BFu1s()
{
  {
    init_simple_test("L_BFu0i_BFu1s");
    static STRUCT_IF_C L_BFu0i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu1s, L_BFu0i_BFu1s)
//============================================================================


struct  L_BFu0i_BFu31i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:31;
};
//SIG(1 L_BFu0i_BFu31i) C1{ FL Fi:0 Fi:31}



static void Test_L_BFu0i_BFu31i()
{
  {
    init_simple_test("L_BFu0i_BFu31i");
    static STRUCT_IF_C L_BFu0i_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0i_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu31i, L_BFu0i_BFu31i)
//============================================================================


struct  L_BFu0i_BFu31ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:31;
};
//SIG(1 L_BFu0i_BFu31ll) C1{ FL Fi:0 FL:31}



static void Test_L_BFu0i_BFu31ll()
{
  {
    init_simple_test("L_BFu0i_BFu31ll");
    static STRUCT_IF_C L_BFu0i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0i_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu31ll, L_BFu0i_BFu31ll)
//============================================================================


struct  L_BFu0i_BFu32i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:32;
};
//SIG(1 L_BFu0i_BFu32i) C1{ FL Fi:0 Fi:32}



static void Test_L_BFu0i_BFu32i()
{
  {
    init_simple_test("L_BFu0i_BFu32i");
    static STRUCT_IF_C L_BFu0i_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0i_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu32i, L_BFu0i_BFu32i)
//============================================================================


struct  L_BFu0i_BFu32ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:32;
};
//SIG(1 L_BFu0i_BFu32ll) C1{ FL Fi:0 FL:32}



static void Test_L_BFu0i_BFu32ll()
{
  {
    init_simple_test("L_BFu0i_BFu32ll");
    static STRUCT_IF_C L_BFu0i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0i_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu32ll, L_BFu0i_BFu32ll)
//============================================================================


struct  L_BFu0i_BFu33  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:33;
};
//SIG(1 L_BFu0i_BFu33) C1{ FL Fi:0 FL:33}



static void Test_L_BFu0i_BFu33()
{
  {
    init_simple_test("L_BFu0i_BFu33");
    static STRUCT_IF_C L_BFu0i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu0i_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu0i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu33, L_BFu0i_BFu33)
//============================================================================


struct  L_BFu0i_BFu7c  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned char v2:7;
};
//SIG(1 L_BFu0i_BFu7c) C1{ FL Fi:0 Fc:7}



static void Test_L_BFu0i_BFu7c()
{
  {
    init_simple_test("L_BFu0i_BFu7c");
    static STRUCT_IF_C L_BFu0i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0i_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu7c, L_BFu0i_BFu7c)
//============================================================================


struct  L_BFu0i_BFu7i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:7;
};
//SIG(1 L_BFu0i_BFu7i) C1{ FL Fi:0 Fi:7}



static void Test_L_BFu0i_BFu7i()
{
  {
    init_simple_test("L_BFu0i_BFu7i");
    static STRUCT_IF_C L_BFu0i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0i_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu7i, L_BFu0i_BFu7i)
//============================================================================


struct  L_BFu0i_BFu7ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:7;
};
//SIG(1 L_BFu0i_BFu7ll) C1{ FL Fi:0 FL:7}



static void Test_L_BFu0i_BFu7ll()
{
  {
    init_simple_test("L_BFu0i_BFu7ll");
    static STRUCT_IF_C L_BFu0i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0i_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu7ll, L_BFu0i_BFu7ll)
//============================================================================


struct  L_BFu0i_BFu7s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2:7;
};
//SIG(1 L_BFu0i_BFu7s) C1{ FL Fi:0 Fs:7}



static void Test_L_BFu0i_BFu7s()
{
  {
    init_simple_test("L_BFu0i_BFu7s");
    static STRUCT_IF_C L_BFu0i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0i_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu7s, L_BFu0i_BFu7s)
//============================================================================


struct  L_BFu0i_BFu8c  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned char v2:8;
};
//SIG(1 L_BFu0i_BFu8c) C1{ FL Fi:0 Fc:8}



static void Test_L_BFu0i_BFu8c()
{
  {
    init_simple_test("L_BFu0i_BFu8c");
    static STRUCT_IF_C L_BFu0i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0i_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu8c, L_BFu0i_BFu8c)
//============================================================================


struct  L_BFu0i_BFu8i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:8;
};
//SIG(1 L_BFu0i_BFu8i) C1{ FL Fi:0 Fi:8}



static void Test_L_BFu0i_BFu8i()
{
  {
    init_simple_test("L_BFu0i_BFu8i");
    static STRUCT_IF_C L_BFu0i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0i_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu8i, L_BFu0i_BFu8i)
//============================================================================


struct  L_BFu0i_BFu8ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:8;
};
//SIG(1 L_BFu0i_BFu8ll) C1{ FL Fi:0 FL:8}



static void Test_L_BFu0i_BFu8ll()
{
  {
    init_simple_test("L_BFu0i_BFu8ll");
    static STRUCT_IF_C L_BFu0i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0i_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu8ll, L_BFu0i_BFu8ll)
//============================================================================


struct  L_BFu0i_BFu8s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2:8;
};
//SIG(1 L_BFu0i_BFu8s) C1{ FL Fi:0 Fs:8}



static void Test_L_BFu0i_BFu8s()
{
  {
    init_simple_test("L_BFu0i_BFu8s");
    static STRUCT_IF_C L_BFu0i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0i_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu8s, L_BFu0i_BFu8s)
//============================================================================


struct  L_BFu0i_BFu9i  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2:9;
};
//SIG(1 L_BFu0i_BFu9i) C1{ FL Fi:0 Fi:9}



static void Test_L_BFu0i_BFu9i()
{
  {
    init_simple_test("L_BFu0i_BFu9i");
    static STRUCT_IF_C L_BFu0i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0i_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu9i, L_BFu0i_BFu9i)
//============================================================================


struct  L_BFu0i_BFu9ll  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2:9;
};
//SIG(1 L_BFu0i_BFu9ll) C1{ FL Fi:0 FL:9}



static void Test_L_BFu0i_BFu9ll()
{
  {
    init_simple_test("L_BFu0i_BFu9ll");
    static STRUCT_IF_C L_BFu0i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0i_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu9ll, L_BFu0i_BFu9ll)
//============================================================================


struct  L_BFu0i_BFu9s  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2:9;
};
//SIG(1 L_BFu0i_BFu9s) C1{ FL Fi:0 Fs:9}



static void Test_L_BFu0i_BFu9s()
{
  {
    init_simple_test("L_BFu0i_BFu9s");
    static STRUCT_IF_C L_BFu0i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu0i_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0i_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_BFu9s, L_BFu0i_BFu9s)
//============================================================================


struct  L_BFu0i_C  {
  __tsi64 v1;
  unsigned int  :0;
  char v2;
};
//SIG(1 L_BFu0i_C) C1{ FL Fi:0 Fc}



static void Test_L_BFu0i_C()
{
  {
    init_simple_test("L_BFu0i_C");
    static STRUCT_IF_C L_BFu0i_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_C)");
    check_field_offset(lv, v1, 0, "L_BFu0i_C.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_C, L_BFu0i_C)
//============================================================================


struct  L_BFu0i_D  {
  __tsi64 v1;
  unsigned int  :0;
  double v2;
};
//SIG(1 L_BFu0i_D) C1{ FL Fi:0 FL}



static void Test_L_BFu0i_D()
{
  {
    init_simple_test("L_BFu0i_D");
    static STRUCT_IF_C L_BFu0i_D lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_D)");
    check_field_offset(lv, v1, 0, "L_BFu0i_D.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_D, L_BFu0i_D)
//============================================================================


struct  L_BFu0i_F  {
  __tsi64 v1;
  unsigned int  :0;
  float v2;
};
//SIG(1 L_BFu0i_F) C1{ FL Fi:0 Fi}



static void Test_L_BFu0i_F()
{
  {
    init_simple_test("L_BFu0i_F");
    static STRUCT_IF_C L_BFu0i_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_F)");
    check_field_offset(lv, v1, 0, "L_BFu0i_F.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_F, L_BFu0i_F)
//============================================================================


struct  L_BFu0i_I  {
  __tsi64 v1;
  unsigned int  :0;
  int v2;
};
//SIG(1 L_BFu0i_I) C1{ FL Fi:0 Fi}



static void Test_L_BFu0i_I()
{
  {
    init_simple_test("L_BFu0i_I");
    static STRUCT_IF_C L_BFu0i_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_I)");
    check_field_offset(lv, v1, 0, "L_BFu0i_I.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_I, L_BFu0i_I)
//============================================================================


struct  L_BFu0i_Ip  {
  __tsi64 v1;
  unsigned int  :0;
  int *v2;
};
//SIG(1 L_BFu0i_Ip) C1{ FL Fi:0 Fp}



static void Test_L_BFu0i_Ip()
{
  {
    init_simple_test("L_BFu0i_Ip");
    static STRUCT_IF_C L_BFu0i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu0i_Ip.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_Ip, L_BFu0i_Ip)
//============================================================================


struct  L_BFu0i_L  {
  __tsi64 v1;
  unsigned int  :0;
  __tsi64 v2;
};
//SIG(1 L_BFu0i_L) C1{ FL Fi:0 FL}



static void Test_L_BFu0i_L()
{
  {
    init_simple_test("L_BFu0i_L");
    static STRUCT_IF_C L_BFu0i_L lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_L)");
    check_field_offset(lv, v1, 0, "L_BFu0i_L.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_L, L_BFu0i_L)
//============================================================================


struct  L_BFu0i_S  {
  __tsi64 v1;
  unsigned int  :0;
  short v2;
};
//SIG(1 L_BFu0i_S) C1{ FL Fi:0 Fs}



static void Test_L_BFu0i_S()
{
  {
    init_simple_test("L_BFu0i_S");
    static STRUCT_IF_C L_BFu0i_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_S)");
    check_field_offset(lv, v1, 0, "L_BFu0i_S.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_S, L_BFu0i_S)
//============================================================================


struct  L_BFu0i_Uc  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned char v2;
};
//SIG(1 L_BFu0i_Uc) C1{ FL Fi:0 Fc}



static void Test_L_BFu0i_Uc()
{
  {
    init_simple_test("L_BFu0i_Uc");
    static STRUCT_IF_C L_BFu0i_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu0i_Uc.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_Uc, L_BFu0i_Uc)
//============================================================================


struct  L_BFu0i_Ui  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned int v2;
};
//SIG(1 L_BFu0i_Ui) C1{ FL Fi:0 Fi}



static void Test_L_BFu0i_Ui()
{
  {
    init_simple_test("L_BFu0i_Ui");
    static STRUCT_IF_C L_BFu0i_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu0i_Ui.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_Ui, L_BFu0i_Ui)
//============================================================================


struct  L_BFu0i_Ul  {
  __tsi64 v1;
  unsigned int  :0;
  __tsu64 v2;
};
//SIG(1 L_BFu0i_Ul) C1{ FL Fi:0 FL}



static void Test_L_BFu0i_Ul()
{
  {
    init_simple_test("L_BFu0i_Ul");
    static STRUCT_IF_C L_BFu0i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu0i_Ul.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_Ul, L_BFu0i_Ul)
//============================================================================


struct  L_BFu0i_Us  {
  __tsi64 v1;
  unsigned int  :0;
  unsigned short v2;
};
//SIG(1 L_BFu0i_Us) C1{ FL Fi:0 Fs}



static void Test_L_BFu0i_Us()
{
  {
    init_simple_test("L_BFu0i_Us");
    static STRUCT_IF_C L_BFu0i_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_Us)");
    check_field_offset(lv, v1, 0, "L_BFu0i_Us.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_Us, L_BFu0i_Us)
//============================================================================


struct  L_BFu0i_Vp  {
  __tsi64 v1;
  unsigned int  :0;
  void *v2;
};
//SIG(1 L_BFu0i_Vp) C1{ FL Fi:0 Fp}



static void Test_L_BFu0i_Vp()
{
  {
    init_simple_test("L_BFu0i_Vp");
    static STRUCT_IF_C L_BFu0i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0i_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu0i_Vp.v1");
    check_field_offset(lv, v2, 8, "L_BFu0i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0i_Vp, L_BFu0i_Vp)
//============================================================================


struct  L_BFu0ll  {
  __tsi64 v1;
  __tsu64  :0;
};
//SIG(1 L_BFu0ll) C1{ FL FL:0}



static void Test_L_BFu0ll()
{
  {
    init_simple_test("L_BFu0ll");
    static STRUCT_IF_C L_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll, L_BFu0ll)
//============================================================================


struct  L_BFu0ll_BFu0c  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned char  :0;
};
//SIG(1 L_BFu0ll_BFu0c) C1{ FL FL:0 Fc:0}



static void Test_L_BFu0ll_BFu0c()
{
  {
    init_simple_test("L_BFu0ll_BFu0c");
    static STRUCT_IF_C L_BFu0ll_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu0c, L_BFu0ll_BFu0c)
//============================================================================


struct  L_BFu0ll_BFu0i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int  :0;
};
//SIG(1 L_BFu0ll_BFu0i) C1{ FL FL:0 Fi:0}



static void Test_L_BFu0ll_BFu0i()
{
  {
    init_simple_test("L_BFu0ll_BFu0i");
    static STRUCT_IF_C L_BFu0ll_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu0i, L_BFu0ll_BFu0i)
//============================================================================


struct  L_BFu0ll_BFu0ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64  :0;
};
//SIG(1 L_BFu0ll_BFu0ll) C1{ FL FL:0 FL:0}



static void Test_L_BFu0ll_BFu0ll()
{
  {
    init_simple_test("L_BFu0ll_BFu0ll");
    static STRUCT_IF_C L_BFu0ll_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu0ll, L_BFu0ll_BFu0ll)
//============================================================================


struct  L_BFu0ll_BFu0s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short  :0;
};
//SIG(1 L_BFu0ll_BFu0s) C1{ FL FL:0 Fs:0}



static void Test_L_BFu0ll_BFu0s()
{
  {
    init_simple_test("L_BFu0ll_BFu0s");
    static STRUCT_IF_C L_BFu0ll_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu0s, L_BFu0ll_BFu0s)
//============================================================================


struct  L_BFu0ll_BFu15i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:15;
};
//SIG(1 L_BFu0ll_BFu15i) C1{ FL FL:0 Fi:15}



static void Test_L_BFu0ll_BFu15i()
{
  {
    init_simple_test("L_BFu0ll_BFu15i");
    static STRUCT_IF_C L_BFu0ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0ll_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu15i, L_BFu0ll_BFu15i)
//============================================================================


struct  L_BFu0ll_BFu15ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:15;
};
//SIG(1 L_BFu0ll_BFu15ll) C1{ FL FL:0 FL:15}



static void Test_L_BFu0ll_BFu15ll()
{
  {
    init_simple_test("L_BFu0ll_BFu15ll");
    static STRUCT_IF_C L_BFu0ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0ll_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu15ll, L_BFu0ll_BFu15ll)
//============================================================================


struct  L_BFu0ll_BFu15s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2:15;
};
//SIG(1 L_BFu0ll_BFu15s) C1{ FL FL:0 Fs:15}



static void Test_L_BFu0ll_BFu15s()
{
  {
    init_simple_test("L_BFu0ll_BFu15s");
    static STRUCT_IF_C L_BFu0ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0ll_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu15s, L_BFu0ll_BFu15s)
//============================================================================


struct  L_BFu0ll_BFu16i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:16;
};
//SIG(1 L_BFu0ll_BFu16i) C1{ FL FL:0 Fi:16}



static void Test_L_BFu0ll_BFu16i()
{
  {
    init_simple_test("L_BFu0ll_BFu16i");
    static STRUCT_IF_C L_BFu0ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0ll_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu16i, L_BFu0ll_BFu16i)
//============================================================================


struct  L_BFu0ll_BFu16ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:16;
};
//SIG(1 L_BFu0ll_BFu16ll) C1{ FL FL:0 FL:16}



static void Test_L_BFu0ll_BFu16ll()
{
  {
    init_simple_test("L_BFu0ll_BFu16ll");
    static STRUCT_IF_C L_BFu0ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0ll_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu16ll, L_BFu0ll_BFu16ll)
//============================================================================


struct  L_BFu0ll_BFu16s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2:16;
};
//SIG(1 L_BFu0ll_BFu16s) C1{ FL FL:0 Fs:16}



static void Test_L_BFu0ll_BFu16s()
{
  {
    init_simple_test("L_BFu0ll_BFu16s");
    static STRUCT_IF_C L_BFu0ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0ll_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu16s, L_BFu0ll_BFu16s)
//============================================================================


struct  L_BFu0ll_BFu17i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:17;
};
//SIG(1 L_BFu0ll_BFu17i) C1{ FL FL:0 Fi:17}



static void Test_L_BFu0ll_BFu17i()
{
  {
    init_simple_test("L_BFu0ll_BFu17i");
    static STRUCT_IF_C L_BFu0ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0ll_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu17i, L_BFu0ll_BFu17i)
//============================================================================


struct  L_BFu0ll_BFu17ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:17;
};
//SIG(1 L_BFu0ll_BFu17ll) C1{ FL FL:0 FL:17}



static void Test_L_BFu0ll_BFu17ll()
{
  {
    init_simple_test("L_BFu0ll_BFu17ll");
    static STRUCT_IF_C L_BFu0ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0ll_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu17ll, L_BFu0ll_BFu17ll)
//============================================================================


struct  L_BFu0ll_BFu1c  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned char v2:1;
};
//SIG(1 L_BFu0ll_BFu1c) C1{ FL FL:0 Fc:1}



static void Test_L_BFu0ll_BFu1c()
{
  {
    init_simple_test("L_BFu0ll_BFu1c");
    static STRUCT_IF_C L_BFu0ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu1c, L_BFu0ll_BFu1c)
//============================================================================


struct  L_BFu0ll_BFu1i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:1;
};
//SIG(1 L_BFu0ll_BFu1i) C1{ FL FL:0 Fi:1}



static void Test_L_BFu0ll_BFu1i()
{
  {
    init_simple_test("L_BFu0ll_BFu1i");
    static STRUCT_IF_C L_BFu0ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu1i, L_BFu0ll_BFu1i)
//============================================================================


struct  L_BFu0ll_BFu1ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:1;
};
//SIG(1 L_BFu0ll_BFu1ll) C1{ FL FL:0 FL:1}



static void Test_L_BFu0ll_BFu1ll()
{
  {
    init_simple_test("L_BFu0ll_BFu1ll");
    static STRUCT_IF_C L_BFu0ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu1ll, L_BFu0ll_BFu1ll)
//============================================================================


struct  L_BFu0ll_BFu1s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2:1;
};
//SIG(1 L_BFu0ll_BFu1s) C1{ FL FL:0 Fs:1}



static void Test_L_BFu0ll_BFu1s()
{
  {
    init_simple_test("L_BFu0ll_BFu1s");
    static STRUCT_IF_C L_BFu0ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu1s, L_BFu0ll_BFu1s)
//============================================================================


struct  L_BFu0ll_BFu31i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:31;
};
//SIG(1 L_BFu0ll_BFu31i) C1{ FL FL:0 Fi:31}



static void Test_L_BFu0ll_BFu31i()
{
  {
    init_simple_test("L_BFu0ll_BFu31i");
    static STRUCT_IF_C L_BFu0ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0ll_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu31i, L_BFu0ll_BFu31i)
//============================================================================


struct  L_BFu0ll_BFu31ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:31;
};
//SIG(1 L_BFu0ll_BFu31ll) C1{ FL FL:0 FL:31}



static void Test_L_BFu0ll_BFu31ll()
{
  {
    init_simple_test("L_BFu0ll_BFu31ll");
    static STRUCT_IF_C L_BFu0ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0ll_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu31ll, L_BFu0ll_BFu31ll)
//============================================================================


struct  L_BFu0ll_BFu32i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:32;
};
//SIG(1 L_BFu0ll_BFu32i) C1{ FL FL:0 Fi:32}



static void Test_L_BFu0ll_BFu32i()
{
  {
    init_simple_test("L_BFu0ll_BFu32i");
    static STRUCT_IF_C L_BFu0ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0ll_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu32i, L_BFu0ll_BFu32i)
//============================================================================


struct  L_BFu0ll_BFu32ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:32;
};
//SIG(1 L_BFu0ll_BFu32ll) C1{ FL FL:0 FL:32}



static void Test_L_BFu0ll_BFu32ll()
{
  {
    init_simple_test("L_BFu0ll_BFu32ll");
    static STRUCT_IF_C L_BFu0ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0ll_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu32ll, L_BFu0ll_BFu32ll)
//============================================================================


struct  L_BFu0ll_BFu33  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:33;
};
//SIG(1 L_BFu0ll_BFu33) C1{ FL FL:0 FL:33}



static void Test_L_BFu0ll_BFu33()
{
  {
    init_simple_test("L_BFu0ll_BFu33");
    static STRUCT_IF_C L_BFu0ll_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu0ll_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu0ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu33, L_BFu0ll_BFu33)
//============================================================================


struct  L_BFu0ll_BFu7c  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned char v2:7;
};
//SIG(1 L_BFu0ll_BFu7c) C1{ FL FL:0 Fc:7}



static void Test_L_BFu0ll_BFu7c()
{
  {
    init_simple_test("L_BFu0ll_BFu7c");
    static STRUCT_IF_C L_BFu0ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0ll_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu7c, L_BFu0ll_BFu7c)
//============================================================================


struct  L_BFu0ll_BFu7i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:7;
};
//SIG(1 L_BFu0ll_BFu7i) C1{ FL FL:0 Fi:7}



static void Test_L_BFu0ll_BFu7i()
{
  {
    init_simple_test("L_BFu0ll_BFu7i");
    static STRUCT_IF_C L_BFu0ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0ll_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu7i, L_BFu0ll_BFu7i)
//============================================================================


struct  L_BFu0ll_BFu7ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:7;
};
//SIG(1 L_BFu0ll_BFu7ll) C1{ FL FL:0 FL:7}



static void Test_L_BFu0ll_BFu7ll()
{
  {
    init_simple_test("L_BFu0ll_BFu7ll");
    static STRUCT_IF_C L_BFu0ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0ll_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu7ll, L_BFu0ll_BFu7ll)
//============================================================================


struct  L_BFu0ll_BFu7s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2:7;
};
//SIG(1 L_BFu0ll_BFu7s) C1{ FL FL:0 Fs:7}



static void Test_L_BFu0ll_BFu7s()
{
  {
    init_simple_test("L_BFu0ll_BFu7s");
    static STRUCT_IF_C L_BFu0ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0ll_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu7s, L_BFu0ll_BFu7s)
//============================================================================


struct  L_BFu0ll_BFu8c  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned char v2:8;
};
//SIG(1 L_BFu0ll_BFu8c) C1{ FL FL:0 Fc:8}



static void Test_L_BFu0ll_BFu8c()
{
  {
    init_simple_test("L_BFu0ll_BFu8c");
    static STRUCT_IF_C L_BFu0ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0ll_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu8c, L_BFu0ll_BFu8c)
//============================================================================


struct  L_BFu0ll_BFu8i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:8;
};
//SIG(1 L_BFu0ll_BFu8i) C1{ FL FL:0 Fi:8}



static void Test_L_BFu0ll_BFu8i()
{
  {
    init_simple_test("L_BFu0ll_BFu8i");
    static STRUCT_IF_C L_BFu0ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0ll_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu8i, L_BFu0ll_BFu8i)
//============================================================================


struct  L_BFu0ll_BFu8ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:8;
};
//SIG(1 L_BFu0ll_BFu8ll) C1{ FL FL:0 FL:8}



static void Test_L_BFu0ll_BFu8ll()
{
  {
    init_simple_test("L_BFu0ll_BFu8ll");
    static STRUCT_IF_C L_BFu0ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0ll_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu8ll, L_BFu0ll_BFu8ll)
//============================================================================


struct  L_BFu0ll_BFu8s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2:8;
};
//SIG(1 L_BFu0ll_BFu8s) C1{ FL FL:0 Fs:8}



static void Test_L_BFu0ll_BFu8s()
{
  {
    init_simple_test("L_BFu0ll_BFu8s");
    static STRUCT_IF_C L_BFu0ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0ll_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu8s, L_BFu0ll_BFu8s)
//============================================================================


struct  L_BFu0ll_BFu9i  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2:9;
};
//SIG(1 L_BFu0ll_BFu9i) C1{ FL FL:0 Fi:9}



static void Test_L_BFu0ll_BFu9i()
{
  {
    init_simple_test("L_BFu0ll_BFu9i");
    static STRUCT_IF_C L_BFu0ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0ll_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu9i, L_BFu0ll_BFu9i)
//============================================================================


struct  L_BFu0ll_BFu9ll  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2:9;
};
//SIG(1 L_BFu0ll_BFu9ll) C1{ FL FL:0 FL:9}



static void Test_L_BFu0ll_BFu9ll()
{
  {
    init_simple_test("L_BFu0ll_BFu9ll");
    static STRUCT_IF_C L_BFu0ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0ll_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu9ll, L_BFu0ll_BFu9ll)
//============================================================================


struct  L_BFu0ll_BFu9s  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2:9;
};
//SIG(1 L_BFu0ll_BFu9s) C1{ FL FL:0 Fs:9}



static void Test_L_BFu0ll_BFu9s()
{
  {
    init_simple_test("L_BFu0ll_BFu9s");
    static STRUCT_IF_C L_BFu0ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0ll_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_BFu9s, L_BFu0ll_BFu9s)
//============================================================================


struct  L_BFu0ll_C  {
  __tsi64 v1;
  __tsu64  :0;
  char v2;
};
//SIG(1 L_BFu0ll_C) C1{ FL FL:0 Fc}



static void Test_L_BFu0ll_C()
{
  {
    init_simple_test("L_BFu0ll_C");
    static STRUCT_IF_C L_BFu0ll_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_C)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_C.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_C, L_BFu0ll_C)
//============================================================================


struct  L_BFu0ll_D  {
  __tsi64 v1;
  __tsu64  :0;
  double v2;
};
//SIG(1 L_BFu0ll_D) C1{ FL FL:0 FL}



static void Test_L_BFu0ll_D()
{
  {
    init_simple_test("L_BFu0ll_D");
    static STRUCT_IF_C L_BFu0ll_D lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_D)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_D.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_D, L_BFu0ll_D)
//============================================================================


struct  L_BFu0ll_F  {
  __tsi64 v1;
  __tsu64  :0;
  float v2;
};
//SIG(1 L_BFu0ll_F) C1{ FL FL:0 Fi}



static void Test_L_BFu0ll_F()
{
  {
    init_simple_test("L_BFu0ll_F");
    static STRUCT_IF_C L_BFu0ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_F)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_F.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_F, L_BFu0ll_F)
//============================================================================


struct  L_BFu0ll_I  {
  __tsi64 v1;
  __tsu64  :0;
  int v2;
};
//SIG(1 L_BFu0ll_I) C1{ FL FL:0 Fi}



static void Test_L_BFu0ll_I()
{
  {
    init_simple_test("L_BFu0ll_I");
    static STRUCT_IF_C L_BFu0ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_I)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_I.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_I, L_BFu0ll_I)
//============================================================================


struct  L_BFu0ll_Ip  {
  __tsi64 v1;
  __tsu64  :0;
  int *v2;
};
//SIG(1 L_BFu0ll_Ip) C1{ FL FL:0 Fp}



static void Test_L_BFu0ll_Ip()
{
  {
    init_simple_test("L_BFu0ll_Ip");
    static STRUCT_IF_C L_BFu0ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_Ip.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_Ip, L_BFu0ll_Ip)
//============================================================================


struct  L_BFu0ll_L  {
  __tsi64 v1;
  __tsu64  :0;
  __tsi64 v2;
};
//SIG(1 L_BFu0ll_L) C1{ FL FL:0 FL}



static void Test_L_BFu0ll_L()
{
  {
    init_simple_test("L_BFu0ll_L");
    static STRUCT_IF_C L_BFu0ll_L lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_L)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_L.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_L, L_BFu0ll_L)
//============================================================================


struct  L_BFu0ll_S  {
  __tsi64 v1;
  __tsu64  :0;
  short v2;
};
//SIG(1 L_BFu0ll_S) C1{ FL FL:0 Fs}



static void Test_L_BFu0ll_S()
{
  {
    init_simple_test("L_BFu0ll_S");
    static STRUCT_IF_C L_BFu0ll_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_S)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_S.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_S, L_BFu0ll_S)
//============================================================================


struct  L_BFu0ll_Uc  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned char v2;
};
//SIG(1 L_BFu0ll_Uc) C1{ FL FL:0 Fc}



static void Test_L_BFu0ll_Uc()
{
  {
    init_simple_test("L_BFu0ll_Uc");
    static STRUCT_IF_C L_BFu0ll_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_Uc.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_Uc, L_BFu0ll_Uc)
//============================================================================


struct  L_BFu0ll_Ui  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned int v2;
};
//SIG(1 L_BFu0ll_Ui) C1{ FL FL:0 Fi}



static void Test_L_BFu0ll_Ui()
{
  {
    init_simple_test("L_BFu0ll_Ui");
    static STRUCT_IF_C L_BFu0ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_Ui.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_Ui, L_BFu0ll_Ui)
//============================================================================


struct  L_BFu0ll_Ul  {
  __tsi64 v1;
  __tsu64  :0;
  __tsu64 v2;
};
//SIG(1 L_BFu0ll_Ul) C1{ FL FL:0 FL}



static void Test_L_BFu0ll_Ul()
{
  {
    init_simple_test("L_BFu0ll_Ul");
    static STRUCT_IF_C L_BFu0ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_Ul.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_Ul, L_BFu0ll_Ul)
//============================================================================


struct  L_BFu0ll_Us  {
  __tsi64 v1;
  __tsu64  :0;
  unsigned short v2;
};
//SIG(1 L_BFu0ll_Us) C1{ FL FL:0 Fs}



static void Test_L_BFu0ll_Us()
{
  {
    init_simple_test("L_BFu0ll_Us");
    static STRUCT_IF_C L_BFu0ll_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_Us)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_Us.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_Us, L_BFu0ll_Us)
//============================================================================


struct  L_BFu0ll_Vp  {
  __tsi64 v1;
  __tsu64  :0;
  void *v2;
};
//SIG(1 L_BFu0ll_Vp) C1{ FL FL:0 Fp}



static void Test_L_BFu0ll_Vp()
{
  {
    init_simple_test("L_BFu0ll_Vp");
    static STRUCT_IF_C L_BFu0ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0ll_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu0ll_Vp.v1");
    check_field_offset(lv, v2, 8, "L_BFu0ll_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0ll_Vp, L_BFu0ll_Vp)
//============================================================================


struct  L_BFu0s  {
  __tsi64 v1;
  unsigned short  :0;
};
//SIG(1 L_BFu0s) C1{ FL Fs:0}



static void Test_L_BFu0s()
{
  {
    init_simple_test("L_BFu0s");
    static STRUCT_IF_C L_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s, L_BFu0s)
//============================================================================


struct  L_BFu0s_BFu0c  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned char  :0;
};
//SIG(1 L_BFu0s_BFu0c) C1{ FL Fs:0 Fc:0}



static void Test_L_BFu0s_BFu0c()
{
  {
    init_simple_test("L_BFu0s_BFu0c");
    static STRUCT_IF_C L_BFu0s_BFu0c lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu0c.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu0c, L_BFu0s_BFu0c)
//============================================================================


struct  L_BFu0s_BFu0i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int  :0;
};
//SIG(1 L_BFu0s_BFu0i) C1{ FL Fs:0 Fi:0}



static void Test_L_BFu0s_BFu0i()
{
  {
    init_simple_test("L_BFu0s_BFu0i");
    static STRUCT_IF_C L_BFu0s_BFu0i lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu0i.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu0i, L_BFu0s_BFu0i)
//============================================================================


struct  L_BFu0s_BFu0ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64  :0;
};
//SIG(1 L_BFu0s_BFu0ll) C1{ FL Fs:0 FL:0}



static void Test_L_BFu0s_BFu0ll()
{
  {
    init_simple_test("L_BFu0s_BFu0ll");
    static STRUCT_IF_C L_BFu0s_BFu0ll lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu0ll.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu0ll, L_BFu0s_BFu0ll)
//============================================================================


struct  L_BFu0s_BFu0s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short  :0;
};
//SIG(1 L_BFu0s_BFu0s) C1{ FL Fs:0 Fs:0}



static void Test_L_BFu0s_BFu0s()
{
  {
    init_simple_test("L_BFu0s_BFu0s");
    static STRUCT_IF_C L_BFu0s_BFu0s lv;
    check2(sizeof(lv), 8, "sizeof(L_BFu0s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu0s.v1");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu0s, L_BFu0s_BFu0s)
//============================================================================


struct  L_BFu0s_BFu15i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:15;
};
//SIG(1 L_BFu0s_BFu15i) C1{ FL Fs:0 Fi:15}



static void Test_L_BFu0s_BFu15i()
{
  {
    init_simple_test("L_BFu0s_BFu15i");
    static STRUCT_IF_C L_BFu0s_BFu15i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu15i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu15i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0s_BFu15i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu15i, L_BFu0s_BFu15i)
//============================================================================


struct  L_BFu0s_BFu15ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:15;
};
//SIG(1 L_BFu0s_BFu15ll) C1{ FL Fs:0 FL:15}



static void Test_L_BFu0s_BFu15ll()
{
  {
    init_simple_test("L_BFu0s_BFu15ll");
    static STRUCT_IF_C L_BFu0s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu15ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu15ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0s_BFu15ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu15ll, L_BFu0s_BFu15ll)
//============================================================================


struct  L_BFu0s_BFu15s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2:15;
};
//SIG(1 L_BFu0s_BFu15s) C1{ FL Fs:0 Fs:15}



static void Test_L_BFu0s_BFu15s()
{
  {
    init_simple_test("L_BFu0s_BFu15s");
    static STRUCT_IF_C L_BFu0s_BFu15s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu15s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu15s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu0s_BFu15s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu0s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu15s, L_BFu0s_BFu15s)
//============================================================================


struct  L_BFu0s_BFu16i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:16;
};
//SIG(1 L_BFu0s_BFu16i) C1{ FL Fs:0 Fi:16}



static void Test_L_BFu0s_BFu16i()
{
  {
    init_simple_test("L_BFu0s_BFu16i");
    static STRUCT_IF_C L_BFu0s_BFu16i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu16i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu16i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0s_BFu16i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu16i, L_BFu0s_BFu16i)
//============================================================================


struct  L_BFu0s_BFu16ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:16;
};
//SIG(1 L_BFu0s_BFu16ll) C1{ FL Fs:0 FL:16}



static void Test_L_BFu0s_BFu16ll()
{
  {
    init_simple_test("L_BFu0s_BFu16ll");
    static STRUCT_IF_C L_BFu0s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu16ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu16ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0s_BFu16ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu16ll, L_BFu0s_BFu16ll)
//============================================================================


struct  L_BFu0s_BFu16s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2:16;
};
//SIG(1 L_BFu0s_BFu16s) C1{ FL Fs:0 Fs:16}



static void Test_L_BFu0s_BFu16s()
{
  {
    init_simple_test("L_BFu0s_BFu16s");
    static STRUCT_IF_C L_BFu0s_BFu16s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu16s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu16s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu0s_BFu16s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu0s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu16s, L_BFu0s_BFu16s)
//============================================================================


struct  L_BFu0s_BFu17i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:17;
};
//SIG(1 L_BFu0s_BFu17i) C1{ FL Fs:0 Fi:17}



static void Test_L_BFu0s_BFu17i()
{
  {
    init_simple_test("L_BFu0s_BFu17i");
    static STRUCT_IF_C L_BFu0s_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu17i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu17i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0s_BFu17i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu17i, L_BFu0s_BFu17i)
//============================================================================


struct  L_BFu0s_BFu17ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:17;
};
//SIG(1 L_BFu0s_BFu17ll) C1{ FL Fs:0 FL:17}



static void Test_L_BFu0s_BFu17ll()
{
  {
    init_simple_test("L_BFu0s_BFu17ll");
    static STRUCT_IF_C L_BFu0s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu17ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu17ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu0s_BFu17ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu0s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu17ll, L_BFu0s_BFu17ll)
//============================================================================


struct  L_BFu0s_BFu1c  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned char v2:1;
};
//SIG(1 L_BFu0s_BFu1c) C1{ FL Fs:0 Fc:1}



static void Test_L_BFu0s_BFu1c()
{
  {
    init_simple_test("L_BFu0s_BFu1c");
    static STRUCT_IF_C L_BFu0s_BFu1c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu1c)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu1c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu1c, L_BFu0s_BFu1c)
//============================================================================


struct  L_BFu0s_BFu1i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:1;
};
//SIG(1 L_BFu0s_BFu1i) C1{ FL Fs:0 Fi:1}



static void Test_L_BFu0s_BFu1i()
{
  {
    init_simple_test("L_BFu0s_BFu1i");
    static STRUCT_IF_C L_BFu0s_BFu1i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu1i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu1i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu1i, L_BFu0s_BFu1i)
//============================================================================


struct  L_BFu0s_BFu1ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:1;
};
//SIG(1 L_BFu0s_BFu1ll) C1{ FL Fs:0 FL:1}



static void Test_L_BFu0s_BFu1ll()
{
  {
    init_simple_test("L_BFu0s_BFu1ll");
    static STRUCT_IF_C L_BFu0s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu1ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu1ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu1ll, L_BFu0s_BFu1ll)
//============================================================================


struct  L_BFu0s_BFu1s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2:1;
};
//SIG(1 L_BFu0s_BFu1s) C1{ FL Fs:0 Fs:1}



static void Test_L_BFu0s_BFu1s()
{
  {
    init_simple_test("L_BFu0s_BFu1s");
    static STRUCT_IF_C L_BFu0s_BFu1s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu1s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu1s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu0s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu1s, L_BFu0s_BFu1s)
//============================================================================


struct  L_BFu0s_BFu31i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:31;
};
//SIG(1 L_BFu0s_BFu31i) C1{ FL Fs:0 Fi:31}



static void Test_L_BFu0s_BFu31i()
{
  {
    init_simple_test("L_BFu0s_BFu31i");
    static STRUCT_IF_C L_BFu0s_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu31i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu31i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0s_BFu31i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu31i, L_BFu0s_BFu31i)
//============================================================================


struct  L_BFu0s_BFu31ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:31;
};
//SIG(1 L_BFu0s_BFu31ll) C1{ FL Fs:0 FL:31}



static void Test_L_BFu0s_BFu31ll()
{
  {
    init_simple_test("L_BFu0s_BFu31ll");
    static STRUCT_IF_C L_BFu0s_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu31ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu31ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu0s_BFu31ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu0s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu31ll, L_BFu0s_BFu31ll)
//============================================================================


struct  L_BFu0s_BFu32i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:32;
};
//SIG(1 L_BFu0s_BFu32i) C1{ FL Fs:0 Fi:32}



static void Test_L_BFu0s_BFu32i()
{
  {
    init_simple_test("L_BFu0s_BFu32i");
    static STRUCT_IF_C L_BFu0s_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu32i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu32i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0s_BFu32i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu32i, L_BFu0s_BFu32i)
//============================================================================


struct  L_BFu0s_BFu32ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:32;
};
//SIG(1 L_BFu0s_BFu32ll) C1{ FL Fs:0 FL:32}



static void Test_L_BFu0s_BFu32ll()
{
  {
    init_simple_test("L_BFu0s_BFu32ll");
    static STRUCT_IF_C L_BFu0s_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu32ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu32ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu0s_BFu32ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu0s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu32ll, L_BFu0s_BFu32ll)
//============================================================================


struct  L_BFu0s_BFu33  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:33;
};
//SIG(1 L_BFu0s_BFu33) C1{ FL Fs:0 FL:33}



static void Test_L_BFu0s_BFu33()
{
  {
    init_simple_test("L_BFu0s_BFu33");
    static STRUCT_IF_C L_BFu0s_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu33)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu33.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu0s_BFu33");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu0s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu33, L_BFu0s_BFu33)
//============================================================================


struct  L_BFu0s_BFu7c  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned char v2:7;
};
//SIG(1 L_BFu0s_BFu7c) C1{ FL Fs:0 Fc:7}



static void Test_L_BFu0s_BFu7c()
{
  {
    init_simple_test("L_BFu0s_BFu7c");
    static STRUCT_IF_C L_BFu0s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu7c)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu7c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0s_BFu7c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu7c, L_BFu0s_BFu7c)
//============================================================================


struct  L_BFu0s_BFu7i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:7;
};
//SIG(1 L_BFu0s_BFu7i) C1{ FL Fs:0 Fi:7}



static void Test_L_BFu0s_BFu7i()
{
  {
    init_simple_test("L_BFu0s_BFu7i");
    static STRUCT_IF_C L_BFu0s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu7i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu7i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0s_BFu7i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu7i, L_BFu0s_BFu7i)
//============================================================================


struct  L_BFu0s_BFu7ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:7;
};
//SIG(1 L_BFu0s_BFu7ll) C1{ FL Fs:0 FL:7}



static void Test_L_BFu0s_BFu7ll()
{
  {
    init_simple_test("L_BFu0s_BFu7ll");
    static STRUCT_IF_C L_BFu0s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu7ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu7ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0s_BFu7ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu7ll, L_BFu0s_BFu7ll)
//============================================================================


struct  L_BFu0s_BFu7s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2:7;
};
//SIG(1 L_BFu0s_BFu7s) C1{ FL Fs:0 Fs:7}



static void Test_L_BFu0s_BFu7s()
{
  {
    init_simple_test("L_BFu0s_BFu7s");
    static STRUCT_IF_C L_BFu0s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu7s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu7s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu0s_BFu7s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu0s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu7s, L_BFu0s_BFu7s)
//============================================================================


struct  L_BFu0s_BFu8c  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned char v2:8;
};
//SIG(1 L_BFu0s_BFu8c) C1{ FL Fs:0 Fc:8}



static void Test_L_BFu0s_BFu8c()
{
  {
    init_simple_test("L_BFu0s_BFu8c");
    static STRUCT_IF_C L_BFu0s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu8c)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu8c.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0s_BFu8c");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu8c, L_BFu0s_BFu8c)
//============================================================================


struct  L_BFu0s_BFu8i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:8;
};
//SIG(1 L_BFu0s_BFu8i) C1{ FL Fs:0 Fi:8}



static void Test_L_BFu0s_BFu8i()
{
  {
    init_simple_test("L_BFu0s_BFu8i");
    static STRUCT_IF_C L_BFu0s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu8i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu8i.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0s_BFu8i");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu8i, L_BFu0s_BFu8i)
//============================================================================


struct  L_BFu0s_BFu8ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:8;
};
//SIG(1 L_BFu0s_BFu8ll) C1{ FL Fs:0 FL:8}



static void Test_L_BFu0s_BFu8ll()
{
  {
    init_simple_test("L_BFu0s_BFu8ll");
    static STRUCT_IF_C L_BFu0s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu8ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu8ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0s_BFu8ll");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu8ll, L_BFu0s_BFu8ll)
//============================================================================


struct  L_BFu0s_BFu8s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2:8;
};
//SIG(1 L_BFu0s_BFu8s) C1{ FL Fs:0 Fs:8}



static void Test_L_BFu0s_BFu8s()
{
  {
    init_simple_test("L_BFu0s_BFu8s");
    static STRUCT_IF_C L_BFu0s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu8s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu8s.v1");
    set_bf_and_test(lv, v2, 8, 0, 8, 1, "L_BFu0s_BFu8s");
    set_bf_and_test(lv, v2, 8, 0, 8, hide_ull(1LL<<7), "L_BFu0s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu8s, L_BFu0s_BFu8s)
//============================================================================


struct  L_BFu0s_BFu9i  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2:9;
};
//SIG(1 L_BFu0s_BFu9i) C1{ FL Fs:0 Fi:9}



static void Test_L_BFu0s_BFu9i()
{
  {
    init_simple_test("L_BFu0s_BFu9i");
    static STRUCT_IF_C L_BFu0s_BFu9i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu9i)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu9i.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0s_BFu9i");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu9i, L_BFu0s_BFu9i)
//============================================================================


struct  L_BFu0s_BFu9ll  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2:9;
};
//SIG(1 L_BFu0s_BFu9ll) C1{ FL Fs:0 FL:9}



static void Test_L_BFu0s_BFu9ll()
{
  {
    init_simple_test("L_BFu0s_BFu9ll");
    static STRUCT_IF_C L_BFu0s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu9ll)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu9ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0s_BFu9ll");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu9ll, L_BFu0s_BFu9ll)
//============================================================================


struct  L_BFu0s_BFu9s  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2:9;
};
//SIG(1 L_BFu0s_BFu9s) C1{ FL Fs:0 Fs:9}



static void Test_L_BFu0s_BFu9s()
{
  {
    init_simple_test("L_BFu0s_BFu9s");
    static STRUCT_IF_C L_BFu0s_BFu9s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_BFu9s)");
    check_field_offset(lv, v1, 0, "L_BFu0s_BFu9s.v1");
    set_bf_and_test(lv, v2, 8, 0, 9, 1, "L_BFu0s_BFu9s");
    set_bf_and_test(lv, v2, 8, 0, 9, hide_ull(1LL<<8), "L_BFu0s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_BFu9s, L_BFu0s_BFu9s)
//============================================================================


struct  L_BFu0s_C  {
  __tsi64 v1;
  unsigned short  :0;
  char v2;
};
//SIG(1 L_BFu0s_C) C1{ FL Fs:0 Fc}



static void Test_L_BFu0s_C()
{
  {
    init_simple_test("L_BFu0s_C");
    static STRUCT_IF_C L_BFu0s_C lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_C)");
    check_field_offset(lv, v1, 0, "L_BFu0s_C.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_C, L_BFu0s_C)
//============================================================================


struct  L_BFu0s_D  {
  __tsi64 v1;
  unsigned short  :0;
  double v2;
};
//SIG(1 L_BFu0s_D) C1{ FL Fs:0 FL}



static void Test_L_BFu0s_D()
{
  {
    init_simple_test("L_BFu0s_D");
    static STRUCT_IF_C L_BFu0s_D lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_D)");
    check_field_offset(lv, v1, 0, "L_BFu0s_D.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_D, L_BFu0s_D)
//============================================================================


struct  L_BFu0s_F  {
  __tsi64 v1;
  unsigned short  :0;
  float v2;
};
//SIG(1 L_BFu0s_F) C1{ FL Fs:0 Fi}



static void Test_L_BFu0s_F()
{
  {
    init_simple_test("L_BFu0s_F");
    static STRUCT_IF_C L_BFu0s_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_F)");
    check_field_offset(lv, v1, 0, "L_BFu0s_F.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_F, L_BFu0s_F)
//============================================================================


struct  L_BFu0s_I  {
  __tsi64 v1;
  unsigned short  :0;
  int v2;
};
//SIG(1 L_BFu0s_I) C1{ FL Fs:0 Fi}



static void Test_L_BFu0s_I()
{
  {
    init_simple_test("L_BFu0s_I");
    static STRUCT_IF_C L_BFu0s_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_I)");
    check_field_offset(lv, v1, 0, "L_BFu0s_I.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_I, L_BFu0s_I)
//============================================================================


struct  L_BFu0s_Ip  {
  __tsi64 v1;
  unsigned short  :0;
  int *v2;
};
//SIG(1 L_BFu0s_Ip) C1{ FL Fs:0 Fp}



static void Test_L_BFu0s_Ip()
{
  {
    init_simple_test("L_BFu0s_Ip");
    static STRUCT_IF_C L_BFu0s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_Ip)");
    check_field_offset(lv, v1, 0, "L_BFu0s_Ip.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_Ip, L_BFu0s_Ip)
//============================================================================


struct  L_BFu0s_L  {
  __tsi64 v1;
  unsigned short  :0;
  __tsi64 v2;
};
//SIG(1 L_BFu0s_L) C1{ FL Fs:0 FL}



static void Test_L_BFu0s_L()
{
  {
    init_simple_test("L_BFu0s_L");
    static STRUCT_IF_C L_BFu0s_L lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_L)");
    check_field_offset(lv, v1, 0, "L_BFu0s_L.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_L, L_BFu0s_L)
//============================================================================


struct  L_BFu0s_S  {
  __tsi64 v1;
  unsigned short  :0;
  short v2;
};
//SIG(1 L_BFu0s_S) C1{ FL Fs:0 Fs}



static void Test_L_BFu0s_S()
{
  {
    init_simple_test("L_BFu0s_S");
    static STRUCT_IF_C L_BFu0s_S lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_S)");
    check_field_offset(lv, v1, 0, "L_BFu0s_S.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_S, L_BFu0s_S)
//============================================================================


struct  L_BFu0s_Uc  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned char v2;
};
//SIG(1 L_BFu0s_Uc) C1{ FL Fs:0 Fc}



static void Test_L_BFu0s_Uc()
{
  {
    init_simple_test("L_BFu0s_Uc");
    static STRUCT_IF_C L_BFu0s_Uc lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_Uc)");
    check_field_offset(lv, v1, 0, "L_BFu0s_Uc.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_Uc, L_BFu0s_Uc)
//============================================================================


struct  L_BFu0s_Ui  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned int v2;
};
//SIG(1 L_BFu0s_Ui) C1{ FL Fs:0 Fi}



static void Test_L_BFu0s_Ui()
{
  {
    init_simple_test("L_BFu0s_Ui");
    static STRUCT_IF_C L_BFu0s_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_Ui)");
    check_field_offset(lv, v1, 0, "L_BFu0s_Ui.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_Ui, L_BFu0s_Ui)
//============================================================================


struct  L_BFu0s_Ul  {
  __tsi64 v1;
  unsigned short  :0;
  __tsu64 v2;
};
//SIG(1 L_BFu0s_Ul) C1{ FL Fs:0 FL}



static void Test_L_BFu0s_Ul()
{
  {
    init_simple_test("L_BFu0s_Ul");
    static STRUCT_IF_C L_BFu0s_Ul lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu0s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_Ul)");
    check_field_offset(lv, v1, 0, "L_BFu0s_Ul.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_Ul, L_BFu0s_Ul)
//============================================================================


struct  L_BFu0s_Us  {
  __tsi64 v1;
  unsigned short  :0;
  unsigned short v2;
};
//SIG(1 L_BFu0s_Us) C1{ FL Fs:0 Fs}



static void Test_L_BFu0s_Us()
{
  {
    init_simple_test("L_BFu0s_Us");
    static STRUCT_IF_C L_BFu0s_Us lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_Us)");
    check_field_offset(lv, v1, 0, "L_BFu0s_Us.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_Us, L_BFu0s_Us)
//============================================================================


struct  L_BFu0s_Vp  {
  __tsi64 v1;
  unsigned short  :0;
  void *v2;
};
//SIG(1 L_BFu0s_Vp) C1{ FL Fs:0 Fp}



static void Test_L_BFu0s_Vp()
{
  {
    init_simple_test("L_BFu0s_Vp");
    static STRUCT_IF_C L_BFu0s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu0s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu0s_Vp)");
    check_field_offset(lv, v1, 0, "L_BFu0s_Vp.v1");
    check_field_offset(lv, v2, 8, "L_BFu0s_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu0s_Vp, L_BFu0s_Vp)
//============================================================================


struct  L_BFu15i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned char  :0;
};
//SIG(1 L_BFu15i_BFu0c) C1{ FL Fi:15 Fc:0}



static void Test_L_BFu15i_BFu0c()
{
  {
    init_simple_test("L_BFu15i_BFu0c");
    static STRUCT_IF_C L_BFu15i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu0c, L_BFu15i_BFu0c)
//============================================================================


struct  L_BFu15i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned int  :0;
};
//SIG(1 L_BFu15i_BFu0i) C1{ FL Fi:15 Fi:0}



static void Test_L_BFu15i_BFu0i()
{
  {
    init_simple_test("L_BFu15i_BFu0i");
    static STRUCT_IF_C L_BFu15i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu0i, L_BFu15i_BFu0i)
//============================================================================


struct  L_BFu15i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:15;
  __tsu64  :0;
};
//SIG(1 L_BFu15i_BFu0ll) C1{ FL Fi:15 FL:0}



static void Test_L_BFu15i_BFu0ll()
{
  {
    init_simple_test("L_BFu15i_BFu0ll");
    static STRUCT_IF_C L_BFu15i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu0ll, L_BFu15i_BFu0ll)
//============================================================================


struct  L_BFu15i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:15;
  unsigned short  :0;
};
//SIG(1 L_BFu15i_BFu0s) C1{ FL Fi:15 Fs:0}



static void Test_L_BFu15i_BFu0s()
{
  {
    init_simple_test("L_BFu15i_BFu0s");
    static STRUCT_IF_C L_BFu15i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu15i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15i_BFu0s, L_BFu15i_BFu0s)
//============================================================================


struct  L_BFu15ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned char  :0;
};
//SIG(1 L_BFu15ll_BFu0c) C1{ FL FL:15 Fc:0}



static void Test_L_BFu15ll_BFu0c()
{
  {
    init_simple_test("L_BFu15ll_BFu0c");
    static STRUCT_IF_C L_BFu15ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu0c, L_BFu15ll_BFu0c)
//============================================================================


struct  L_BFu15ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned int  :0;
};
//SIG(1 L_BFu15ll_BFu0i) C1{ FL FL:15 Fi:0}



static void Test_L_BFu15ll_BFu0i()
{
  {
    init_simple_test("L_BFu15ll_BFu0i");
    static STRUCT_IF_C L_BFu15ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu0i, L_BFu15ll_BFu0i)
//============================================================================


struct  L_BFu15ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:15;
  __tsu64  :0;
};
//SIG(1 L_BFu15ll_BFu0ll) C1{ FL FL:15 FL:0}



static void Test_L_BFu15ll_BFu0ll()
{
  {
    init_simple_test("L_BFu15ll_BFu0ll");
    static STRUCT_IF_C L_BFu15ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu0ll, L_BFu15ll_BFu0ll)
//============================================================================


struct  L_BFu15ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:15;
  unsigned short  :0;
};
//SIG(1 L_BFu15ll_BFu0s) C1{ FL FL:15 Fs:0}



static void Test_L_BFu15ll_BFu0s()
{
  {
    init_simple_test("L_BFu15ll_BFu0s");
    static STRUCT_IF_C L_BFu15ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu15ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15ll_BFu0s, L_BFu15ll_BFu0s)
//============================================================================


struct  L_BFu15s_BFu0c  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned char  :0;
};
//SIG(1 L_BFu15s_BFu0c) C1{ FL Fs:15 Fc:0}



static void Test_L_BFu15s_BFu0c()
{
  {
    init_simple_test("L_BFu15s_BFu0c");
    static STRUCT_IF_C L_BFu15s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu0c, L_BFu15s_BFu0c)
//============================================================================


struct  L_BFu15s_BFu0i  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned int  :0;
};
//SIG(1 L_BFu15s_BFu0i) C1{ FL Fs:15 Fi:0}



static void Test_L_BFu15s_BFu0i()
{
  {
    init_simple_test("L_BFu15s_BFu0i");
    static STRUCT_IF_C L_BFu15s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu0i, L_BFu15s_BFu0i)
//============================================================================


struct  L_BFu15s_BFu0ll  {
  __tsi64 v1;
  unsigned short v2:15;
  __tsu64  :0;
};
//SIG(1 L_BFu15s_BFu0ll) C1{ FL Fs:15 FL:0}



static void Test_L_BFu15s_BFu0ll()
{
  {
    init_simple_test("L_BFu15s_BFu0ll");
    static STRUCT_IF_C L_BFu15s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu0ll, L_BFu15s_BFu0ll)
//============================================================================


struct  L_BFu15s_BFu0s  {
  __tsi64 v1;
  unsigned short v2:15;
  unsigned short  :0;
};
//SIG(1 L_BFu15s_BFu0s) C1{ FL Fs:15 Fs:0}



static void Test_L_BFu15s_BFu0s()
{
  {
    init_simple_test("L_BFu15s_BFu0s");
    static STRUCT_IF_C L_BFu15s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu15s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu15s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu15s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 15, 1, "L_BFu15s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 15, hide_ull(1LL<<14), "L_BFu15s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu15s_BFu0s, L_BFu15s_BFu0s)
//============================================================================


struct  L_BFu16i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned char  :0;
};
//SIG(1 L_BFu16i_BFu0c) C1{ FL Fi:16 Fc:0}



static void Test_L_BFu16i_BFu0c()
{
  {
    init_simple_test("L_BFu16i_BFu0c");
    static STRUCT_IF_C L_BFu16i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu0c, L_BFu16i_BFu0c)
//============================================================================


struct  L_BFu16i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned int  :0;
};
//SIG(1 L_BFu16i_BFu0i) C1{ FL Fi:16 Fi:0}



static void Test_L_BFu16i_BFu0i()
{
  {
    init_simple_test("L_BFu16i_BFu0i");
    static STRUCT_IF_C L_BFu16i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu0i, L_BFu16i_BFu0i)
//============================================================================


struct  L_BFu16i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:16;
  __tsu64  :0;
};
//SIG(1 L_BFu16i_BFu0ll) C1{ FL Fi:16 FL:0}



static void Test_L_BFu16i_BFu0ll()
{
  {
    init_simple_test("L_BFu16i_BFu0ll");
    static STRUCT_IF_C L_BFu16i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu0ll, L_BFu16i_BFu0ll)
//============================================================================


struct  L_BFu16i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:16;
  unsigned short  :0;
};
//SIG(1 L_BFu16i_BFu0s) C1{ FL Fi:16 Fs:0}



static void Test_L_BFu16i_BFu0s()
{
  {
    init_simple_test("L_BFu16i_BFu0s");
    static STRUCT_IF_C L_BFu16i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu16i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16i_BFu0s, L_BFu16i_BFu0s)
//============================================================================


struct  L_BFu16ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned char  :0;
};
//SIG(1 L_BFu16ll_BFu0c) C1{ FL FL:16 Fc:0}



static void Test_L_BFu16ll_BFu0c()
{
  {
    init_simple_test("L_BFu16ll_BFu0c");
    static STRUCT_IF_C L_BFu16ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu0c, L_BFu16ll_BFu0c)
//============================================================================


struct  L_BFu16ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned int  :0;
};
//SIG(1 L_BFu16ll_BFu0i) C1{ FL FL:16 Fi:0}



static void Test_L_BFu16ll_BFu0i()
{
  {
    init_simple_test("L_BFu16ll_BFu0i");
    static STRUCT_IF_C L_BFu16ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu0i, L_BFu16ll_BFu0i)
//============================================================================


struct  L_BFu16ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:16;
  __tsu64  :0;
};
//SIG(1 L_BFu16ll_BFu0ll) C1{ FL FL:16 FL:0}



static void Test_L_BFu16ll_BFu0ll()
{
  {
    init_simple_test("L_BFu16ll_BFu0ll");
    static STRUCT_IF_C L_BFu16ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu0ll, L_BFu16ll_BFu0ll)
//============================================================================


struct  L_BFu16ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:16;
  unsigned short  :0;
};
//SIG(1 L_BFu16ll_BFu0s) C1{ FL FL:16 Fs:0}



static void Test_L_BFu16ll_BFu0s()
{
  {
    init_simple_test("L_BFu16ll_BFu0s");
    static STRUCT_IF_C L_BFu16ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu16ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16ll_BFu0s, L_BFu16ll_BFu0s)
//============================================================================


struct  L_BFu16s_BFu0c  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned char  :0;
};
//SIG(1 L_BFu16s_BFu0c) C1{ FL Fs:16 Fc:0}



static void Test_L_BFu16s_BFu0c()
{
  {
    init_simple_test("L_BFu16s_BFu0c");
    static STRUCT_IF_C L_BFu16s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu0c, L_BFu16s_BFu0c)
//============================================================================


struct  L_BFu16s_BFu0i  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned int  :0;
};
//SIG(1 L_BFu16s_BFu0i) C1{ FL Fs:16 Fi:0}



static void Test_L_BFu16s_BFu0i()
{
  {
    init_simple_test("L_BFu16s_BFu0i");
    static STRUCT_IF_C L_BFu16s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu0i, L_BFu16s_BFu0i)
//============================================================================


struct  L_BFu16s_BFu0ll  {
  __tsi64 v1;
  unsigned short v2:16;
  __tsu64  :0;
};
//SIG(1 L_BFu16s_BFu0ll) C1{ FL Fs:16 FL:0}



static void Test_L_BFu16s_BFu0ll()
{
  {
    init_simple_test("L_BFu16s_BFu0ll");
    static STRUCT_IF_C L_BFu16s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu0ll, L_BFu16s_BFu0ll)
//============================================================================


struct  L_BFu16s_BFu0s  {
  __tsi64 v1;
  unsigned short v2:16;
  unsigned short  :0;
};
//SIG(1 L_BFu16s_BFu0s) C1{ FL Fs:16 Fs:0}



static void Test_L_BFu16s_BFu0s()
{
  {
    init_simple_test("L_BFu16s_BFu0s");
    static STRUCT_IF_C L_BFu16s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu16s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu16s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu16s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 16, 1, "L_BFu16s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 16, hide_ull(1LL<<15), "L_BFu16s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu16s_BFu0s, L_BFu16s_BFu0s)
//============================================================================


struct  L_BFu17i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned char  :0;
};
//SIG(1 L_BFu17i_BFu0c) C1{ FL Fi:17 Fc:0}



static void Test_L_BFu17i_BFu0c()
{
  {
    init_simple_test("L_BFu17i_BFu0c");
    static STRUCT_IF_C L_BFu17i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu0c, L_BFu17i_BFu0c)
//============================================================================


struct  L_BFu17i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned int  :0;
};
//SIG(1 L_BFu17i_BFu0i) C1{ FL Fi:17 Fi:0}



static void Test_L_BFu17i_BFu0i()
{
  {
    init_simple_test("L_BFu17i_BFu0i");
    static STRUCT_IF_C L_BFu17i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu0i, L_BFu17i_BFu0i)
//============================================================================


struct  L_BFu17i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:17;
  __tsu64  :0;
};
//SIG(1 L_BFu17i_BFu0ll) C1{ FL Fi:17 FL:0}



static void Test_L_BFu17i_BFu0ll()
{
  {
    init_simple_test("L_BFu17i_BFu0ll");
    static STRUCT_IF_C L_BFu17i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu0ll, L_BFu17i_BFu0ll)
//============================================================================


struct  L_BFu17i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:17;
  unsigned short  :0;
};
//SIG(1 L_BFu17i_BFu0s) C1{ FL Fi:17 Fs:0}



static void Test_L_BFu17i_BFu0s()
{
  {
    init_simple_test("L_BFu17i_BFu0s");
    static STRUCT_IF_C L_BFu17i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu17i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17i_BFu0s, L_BFu17i_BFu0s)
//============================================================================


struct  L_BFu17ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned char  :0;
};
//SIG(1 L_BFu17ll_BFu0c) C1{ FL FL:17 Fc:0}



static void Test_L_BFu17ll_BFu0c()
{
  {
    init_simple_test("L_BFu17ll_BFu0c");
    static STRUCT_IF_C L_BFu17ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu0c, L_BFu17ll_BFu0c)
//============================================================================


struct  L_BFu17ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned int  :0;
};
//SIG(1 L_BFu17ll_BFu0i) C1{ FL FL:17 Fi:0}



static void Test_L_BFu17ll_BFu0i()
{
  {
    init_simple_test("L_BFu17ll_BFu0i");
    static STRUCT_IF_C L_BFu17ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu0i, L_BFu17ll_BFu0i)
//============================================================================


struct  L_BFu17ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:17;
  __tsu64  :0;
};
//SIG(1 L_BFu17ll_BFu0ll) C1{ FL FL:17 FL:0}



static void Test_L_BFu17ll_BFu0ll()
{
  {
    init_simple_test("L_BFu17ll_BFu0ll");
    static STRUCT_IF_C L_BFu17ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu0ll, L_BFu17ll_BFu0ll)
//============================================================================


struct  L_BFu17ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:17;
  unsigned short  :0;
};
//SIG(1 L_BFu17ll_BFu0s) C1{ FL FL:17 Fs:0}



static void Test_L_BFu17ll_BFu0s()
{
  {
    init_simple_test("L_BFu17ll_BFu0s");
    static STRUCT_IF_C L_BFu17ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu17ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu17ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu17ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 17, 1, "L_BFu17ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 17, hide_ull(1LL<<16), "L_BFu17ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu17ll_BFu0s, L_BFu17ll_BFu0s)
//============================================================================


struct  L_BFu1c_BFu0c  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned char  :0;
};
//SIG(1 L_BFu1c_BFu0c) C1{ FL Fc:1 Fc:0}



static void Test_L_BFu1c_BFu0c()
{
  {
    init_simple_test("L_BFu1c_BFu0c");
    static STRUCT_IF_C L_BFu1c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu0c, L_BFu1c_BFu0c)
//============================================================================


struct  L_BFu1c_BFu0i  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned int  :0;
};
//SIG(1 L_BFu1c_BFu0i) C1{ FL Fc:1 Fi:0}



static void Test_L_BFu1c_BFu0i()
{
  {
    init_simple_test("L_BFu1c_BFu0i");
    static STRUCT_IF_C L_BFu1c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu0i, L_BFu1c_BFu0i)
//============================================================================


struct  L_BFu1c_BFu0ll  {
  __tsi64 v1;
  unsigned char v2:1;
  __tsu64  :0;
};
//SIG(1 L_BFu1c_BFu0ll) C1{ FL Fc:1 FL:0}



static void Test_L_BFu1c_BFu0ll()
{
  {
    init_simple_test("L_BFu1c_BFu0ll");
    static STRUCT_IF_C L_BFu1c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu0ll, L_BFu1c_BFu0ll)
//============================================================================


struct  L_BFu1c_BFu0s  {
  __tsi64 v1;
  unsigned char v2:1;
  unsigned short  :0;
};
//SIG(1 L_BFu1c_BFu0s) C1{ FL Fc:1 Fs:0}



static void Test_L_BFu1c_BFu0s()
{
  {
    init_simple_test("L_BFu1c_BFu0s");
    static STRUCT_IF_C L_BFu1c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1c_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu1c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1c_BFu0s, L_BFu1c_BFu0s)
//============================================================================


struct  L_BFu1i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned char  :0;
};
//SIG(1 L_BFu1i_BFu0c) C1{ FL Fi:1 Fc:0}



static void Test_L_BFu1i_BFu0c()
{
  {
    init_simple_test("L_BFu1i_BFu0c");
    static STRUCT_IF_C L_BFu1i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu0c, L_BFu1i_BFu0c)
//============================================================================


struct  L_BFu1i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned int  :0;
};
//SIG(1 L_BFu1i_BFu0i) C1{ FL Fi:1 Fi:0}



static void Test_L_BFu1i_BFu0i()
{
  {
    init_simple_test("L_BFu1i_BFu0i");
    static STRUCT_IF_C L_BFu1i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu0i, L_BFu1i_BFu0i)
//============================================================================


struct  L_BFu1i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:1;
  __tsu64  :0;
};
//SIG(1 L_BFu1i_BFu0ll) C1{ FL Fi:1 FL:0}



static void Test_L_BFu1i_BFu0ll()
{
  {
    init_simple_test("L_BFu1i_BFu0ll");
    static STRUCT_IF_C L_BFu1i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu0ll, L_BFu1i_BFu0ll)
//============================================================================


struct  L_BFu1i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:1;
  unsigned short  :0;
};
//SIG(1 L_BFu1i_BFu0s) C1{ FL Fi:1 Fs:0}



static void Test_L_BFu1i_BFu0s()
{
  {
    init_simple_test("L_BFu1i_BFu0s");
    static STRUCT_IF_C L_BFu1i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu1i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1i_BFu0s, L_BFu1i_BFu0s)
//============================================================================


struct  L_BFu1ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned char  :0;
};
//SIG(1 L_BFu1ll_BFu0c) C1{ FL FL:1 Fc:0}



static void Test_L_BFu1ll_BFu0c()
{
  {
    init_simple_test("L_BFu1ll_BFu0c");
    static STRUCT_IF_C L_BFu1ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu0c, L_BFu1ll_BFu0c)
//============================================================================


struct  L_BFu1ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned int  :0;
};
//SIG(1 L_BFu1ll_BFu0i) C1{ FL FL:1 Fi:0}



static void Test_L_BFu1ll_BFu0i()
{
  {
    init_simple_test("L_BFu1ll_BFu0i");
    static STRUCT_IF_C L_BFu1ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu0i, L_BFu1ll_BFu0i)
//============================================================================


struct  L_BFu1ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:1;
  __tsu64  :0;
};
//SIG(1 L_BFu1ll_BFu0ll) C1{ FL FL:1 FL:0}



static void Test_L_BFu1ll_BFu0ll()
{
  {
    init_simple_test("L_BFu1ll_BFu0ll");
    static STRUCT_IF_C L_BFu1ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu0ll, L_BFu1ll_BFu0ll)
//============================================================================


struct  L_BFu1ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:1;
  unsigned short  :0;
};
//SIG(1 L_BFu1ll_BFu0s) C1{ FL FL:1 Fs:0}



static void Test_L_BFu1ll_BFu0s()
{
  {
    init_simple_test("L_BFu1ll_BFu0s");
    static STRUCT_IF_C L_BFu1ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu1ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1ll_BFu0s, L_BFu1ll_BFu0s)
//============================================================================


struct  L_BFu1s_BFu0c  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned char  :0;
};
//SIG(1 L_BFu1s_BFu0c) C1{ FL Fs:1 Fc:0}



static void Test_L_BFu1s_BFu0c()
{
  {
    init_simple_test("L_BFu1s_BFu0c");
    static STRUCT_IF_C L_BFu1s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu0c, L_BFu1s_BFu0c)
//============================================================================


struct  L_BFu1s_BFu0i  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned int  :0;
};
//SIG(1 L_BFu1s_BFu0i) C1{ FL Fs:1 Fi:0}



static void Test_L_BFu1s_BFu0i()
{
  {
    init_simple_test("L_BFu1s_BFu0i");
    static STRUCT_IF_C L_BFu1s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu0i, L_BFu1s_BFu0i)
//============================================================================


struct  L_BFu1s_BFu0ll  {
  __tsi64 v1;
  unsigned short v2:1;
  __tsu64  :0;
};
//SIG(1 L_BFu1s_BFu0ll) C1{ FL Fs:1 FL:0}



static void Test_L_BFu1s_BFu0ll()
{
  {
    init_simple_test("L_BFu1s_BFu0ll");
    static STRUCT_IF_C L_BFu1s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu0ll, L_BFu1s_BFu0ll)
//============================================================================


struct  L_BFu1s_BFu0s  {
  __tsi64 v1;
  unsigned short v2:1;
  unsigned short  :0;
};
//SIG(1 L_BFu1s_BFu0s) C1{ FL Fs:1 Fs:0}



static void Test_L_BFu1s_BFu0s()
{
  {
    init_simple_test("L_BFu1s_BFu0s");
    static STRUCT_IF_C L_BFu1s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu1s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu1s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu1s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 1, 1, "L_BFu1s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu1s_BFu0s, L_BFu1s_BFu0s)
//============================================================================


struct  L_BFu31i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned char  :0;
};
//SIG(1 L_BFu31i_BFu0c) C1{ FL Fi:31 Fc:0}



static void Test_L_BFu31i_BFu0c()
{
  {
    init_simple_test("L_BFu31i_BFu0c");
    static STRUCT_IF_C L_BFu31i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu0c, L_BFu31i_BFu0c)
//============================================================================


struct  L_BFu31i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned int  :0;
};
//SIG(1 L_BFu31i_BFu0i) C1{ FL Fi:31 Fi:0}



static void Test_L_BFu31i_BFu0i()
{
  {
    init_simple_test("L_BFu31i_BFu0i");
    static STRUCT_IF_C L_BFu31i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu0i, L_BFu31i_BFu0i)
//============================================================================


struct  L_BFu31i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:31;
  __tsu64  :0;
};
//SIG(1 L_BFu31i_BFu0ll) C1{ FL Fi:31 FL:0}



static void Test_L_BFu31i_BFu0ll()
{
  {
    init_simple_test("L_BFu31i_BFu0ll");
    static STRUCT_IF_C L_BFu31i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu0ll, L_BFu31i_BFu0ll)
//============================================================================


struct  L_BFu31i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:31;
  unsigned short  :0;
};
//SIG(1 L_BFu31i_BFu0s) C1{ FL Fi:31 Fs:0}



static void Test_L_BFu31i_BFu0s()
{
  {
    init_simple_test("L_BFu31i_BFu0s");
    static STRUCT_IF_C L_BFu31i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu31i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31i_BFu0s, L_BFu31i_BFu0s)
//============================================================================


struct  L_BFu31ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned char  :0;
};
//SIG(1 L_BFu31ll_BFu0c) C1{ FL FL:31 Fc:0}



static void Test_L_BFu31ll_BFu0c()
{
  {
    init_simple_test("L_BFu31ll_BFu0c");
    static STRUCT_IF_C L_BFu31ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu0c, L_BFu31ll_BFu0c)
//============================================================================


struct  L_BFu31ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned int  :0;
};
//SIG(1 L_BFu31ll_BFu0i) C1{ FL FL:31 Fi:0}



static void Test_L_BFu31ll_BFu0i()
{
  {
    init_simple_test("L_BFu31ll_BFu0i");
    static STRUCT_IF_C L_BFu31ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu0i, L_BFu31ll_BFu0i)
//============================================================================


struct  L_BFu31ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:31;
  __tsu64  :0;
};
//SIG(1 L_BFu31ll_BFu0ll) C1{ FL FL:31 FL:0}



static void Test_L_BFu31ll_BFu0ll()
{
  {
    init_simple_test("L_BFu31ll_BFu0ll");
    static STRUCT_IF_C L_BFu31ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu0ll, L_BFu31ll_BFu0ll)
//============================================================================


struct  L_BFu31ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:31;
  unsigned short  :0;
};
//SIG(1 L_BFu31ll_BFu0s) C1{ FL FL:31 Fs:0}



static void Test_L_BFu31ll_BFu0s()
{
  {
    init_simple_test("L_BFu31ll_BFu0s");
    static STRUCT_IF_C L_BFu31ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu31ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu31ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu31ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 31, 1, "L_BFu31ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 31, hide_ull(1LL<<30), "L_BFu31ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu31ll_BFu0s, L_BFu31ll_BFu0s)
//============================================================================


struct  L_BFu32i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned char  :0;
};
//SIG(1 L_BFu32i_BFu0c) C1{ FL Fi:32 Fc:0}



static void Test_L_BFu32i_BFu0c()
{
  {
    init_simple_test("L_BFu32i_BFu0c");
    static STRUCT_IF_C L_BFu32i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu0c, L_BFu32i_BFu0c)
//============================================================================


struct  L_BFu32i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned int  :0;
};
//SIG(1 L_BFu32i_BFu0i) C1{ FL Fi:32 Fi:0}



static void Test_L_BFu32i_BFu0i()
{
  {
    init_simple_test("L_BFu32i_BFu0i");
    static STRUCT_IF_C L_BFu32i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu0i, L_BFu32i_BFu0i)
//============================================================================


struct  L_BFu32i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:32;
  __tsu64  :0;
};
//SIG(1 L_BFu32i_BFu0ll) C1{ FL Fi:32 FL:0}



static void Test_L_BFu32i_BFu0ll()
{
  {
    init_simple_test("L_BFu32i_BFu0ll");
    static STRUCT_IF_C L_BFu32i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu0ll, L_BFu32i_BFu0ll)
//============================================================================


struct  L_BFu32i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:32;
  unsigned short  :0;
};
//SIG(1 L_BFu32i_BFu0s) C1{ FL Fi:32 Fs:0}



static void Test_L_BFu32i_BFu0s()
{
  {
    init_simple_test("L_BFu32i_BFu0s");
    static STRUCT_IF_C L_BFu32i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu32i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32i_BFu0s, L_BFu32i_BFu0s)
//============================================================================


struct  L_BFu32ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned char  :0;
};
//SIG(1 L_BFu32ll_BFu0c) C1{ FL FL:32 Fc:0}



static void Test_L_BFu32ll_BFu0c()
{
  {
    init_simple_test("L_BFu32ll_BFu0c");
    static STRUCT_IF_C L_BFu32ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu0c, L_BFu32ll_BFu0c)
//============================================================================


struct  L_BFu32ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned int  :0;
};
//SIG(1 L_BFu32ll_BFu0i) C1{ FL FL:32 Fi:0}



static void Test_L_BFu32ll_BFu0i()
{
  {
    init_simple_test("L_BFu32ll_BFu0i");
    static STRUCT_IF_C L_BFu32ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu0i, L_BFu32ll_BFu0i)
//============================================================================


struct  L_BFu32ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:32;
  __tsu64  :0;
};
//SIG(1 L_BFu32ll_BFu0ll) C1{ FL FL:32 FL:0}



static void Test_L_BFu32ll_BFu0ll()
{
  {
    init_simple_test("L_BFu32ll_BFu0ll");
    static STRUCT_IF_C L_BFu32ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu0ll, L_BFu32ll_BFu0ll)
//============================================================================


struct  L_BFu32ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:32;
  unsigned short  :0;
};
//SIG(1 L_BFu32ll_BFu0s) C1{ FL FL:32 Fs:0}



static void Test_L_BFu32ll_BFu0s()
{
  {
    init_simple_test("L_BFu32ll_BFu0s");
    static STRUCT_IF_C L_BFu32ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu32ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu32ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu32ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 32, 1, "L_BFu32ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 32, hide_ull(1LL<<31), "L_BFu32ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu32ll_BFu0s, L_BFu32ll_BFu0s)
//============================================================================


struct  L_BFu33_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned char  :0;
};
//SIG(1 L_BFu33_BFu0c) C1{ FL FL:33 Fc:0}



static void Test_L_BFu33_BFu0c()
{
  {
    init_simple_test("L_BFu33_BFu0c");
    static STRUCT_IF_C L_BFu33_BFu0c lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu0c, L_BFu33_BFu0c)
//============================================================================


struct  L_BFu33_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned int  :0;
};
//SIG(1 L_BFu33_BFu0i) C1{ FL FL:33 Fi:0}



static void Test_L_BFu33_BFu0i()
{
  {
    init_simple_test("L_BFu33_BFu0i");
    static STRUCT_IF_C L_BFu33_BFu0i lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu0i, L_BFu33_BFu0i)
//============================================================================


struct  L_BFu33_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:33;
  __tsu64  :0;
};
//SIG(1 L_BFu33_BFu0ll) C1{ FL FL:33 FL:0}



static void Test_L_BFu33_BFu0ll()
{
  {
    init_simple_test("L_BFu33_BFu0ll");
    static STRUCT_IF_C L_BFu33_BFu0ll lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu0ll, L_BFu33_BFu0ll)
//============================================================================


struct  L_BFu33_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:33;
  unsigned short  :0;
};
//SIG(1 L_BFu33_BFu0s) C1{ FL FL:33 Fs:0}



static void Test_L_BFu33_BFu0s()
{
  {
    init_simple_test("L_BFu33_BFu0s");
    static STRUCT_IF_C L_BFu33_BFu0s lv;
    check2(sizeof(lv), 16, "sizeof(L_BFu33_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu33_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu33_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 33, 1, "L_BFu33_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 33, hide_ull(1LL<<32), "L_BFu33_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu33_BFu0s, L_BFu33_BFu0s)
//============================================================================


struct  L_BFu7c_BFu0c  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned char  :0;
};
//SIG(1 L_BFu7c_BFu0c) C1{ FL Fc:7 Fc:0}



static void Test_L_BFu7c_BFu0c()
{
  {
    init_simple_test("L_BFu7c_BFu0c");
    static STRUCT_IF_C L_BFu7c_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu0c, L_BFu7c_BFu0c)
//============================================================================


struct  L_BFu7c_BFu0i  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned int  :0;
};
//SIG(1 L_BFu7c_BFu0i) C1{ FL Fc:7 Fi:0}



static void Test_L_BFu7c_BFu0i()
{
  {
    init_simple_test("L_BFu7c_BFu0i");
    static STRUCT_IF_C L_BFu7c_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu0i, L_BFu7c_BFu0i)
//============================================================================


struct  L_BFu7c_BFu0ll  {
  __tsi64 v1;
  unsigned char v2:7;
  __tsu64  :0;
};
//SIG(1 L_BFu7c_BFu0ll) C1{ FL Fc:7 FL:0}



static void Test_L_BFu7c_BFu0ll()
{
  {
    init_simple_test("L_BFu7c_BFu0ll");
    static STRUCT_IF_C L_BFu7c_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu0ll, L_BFu7c_BFu0ll)
//============================================================================


struct  L_BFu7c_BFu0s  {
  __tsi64 v1;
  unsigned char v2:7;
  unsigned short  :0;
};
//SIG(1 L_BFu7c_BFu0s) C1{ FL Fc:7 Fs:0}



static void Test_L_BFu7c_BFu0s()
{
  {
    init_simple_test("L_BFu7c_BFu0s");
    static STRUCT_IF_C L_BFu7c_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7c_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7c_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu7c_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7c_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7c_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7c_BFu0s, L_BFu7c_BFu0s)
//============================================================================


struct  L_BFu7i_BFu0c  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned char  :0;
};
//SIG(1 L_BFu7i_BFu0c) C1{ FL Fi:7 Fc:0}



static void Test_L_BFu7i_BFu0c()
{
  {
    init_simple_test("L_BFu7i_BFu0c");
    static STRUCT_IF_C L_BFu7i_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu0c, L_BFu7i_BFu0c)
//============================================================================


struct  L_BFu7i_BFu0i  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned int  :0;
};
//SIG(1 L_BFu7i_BFu0i) C1{ FL Fi:7 Fi:0}



static void Test_L_BFu7i_BFu0i()
{
  {
    init_simple_test("L_BFu7i_BFu0i");
    static STRUCT_IF_C L_BFu7i_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu0i, L_BFu7i_BFu0i)
//============================================================================


struct  L_BFu7i_BFu0ll  {
  __tsi64 v1;
  unsigned int v2:7;
  __tsu64  :0;
};
//SIG(1 L_BFu7i_BFu0ll) C1{ FL Fi:7 FL:0}



static void Test_L_BFu7i_BFu0ll()
{
  {
    init_simple_test("L_BFu7i_BFu0ll");
    static STRUCT_IF_C L_BFu7i_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu0ll, L_BFu7i_BFu0ll)
//============================================================================


struct  L_BFu7i_BFu0s  {
  __tsi64 v1;
  unsigned int v2:7;
  unsigned short  :0;
};
//SIG(1 L_BFu7i_BFu0s) C1{ FL Fi:7 Fs:0}



static void Test_L_BFu7i_BFu0s()
{
  {
    init_simple_test("L_BFu7i_BFu0s");
    static STRUCT_IF_C L_BFu7i_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7i_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7i_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu7i_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7i_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7i_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7i_BFu0s, L_BFu7i_BFu0s)
//============================================================================


struct  L_BFu7ll_BFu0c  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned char  :0;
};
//SIG(1 L_BFu7ll_BFu0c) C1{ FL FL:7 Fc:0}



static void Test_L_BFu7ll_BFu0c()
{
  {
    init_simple_test("L_BFu7ll_BFu0c");
    static STRUCT_IF_C L_BFu7ll_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu0c, L_BFu7ll_BFu0c)
//============================================================================


struct  L_BFu7ll_BFu0i  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned int  :0;
};
//SIG(1 L_BFu7ll_BFu0i) C1{ FL FL:7 Fi:0}



static void Test_L_BFu7ll_BFu0i()
{
  {
    init_simple_test("L_BFu7ll_BFu0i");
    static STRUCT_IF_C L_BFu7ll_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu0i, L_BFu7ll_BFu0i)
//============================================================================


struct  L_BFu7ll_BFu0ll  {
  __tsi64 v1;
  __tsu64 v2:7;
  __tsu64  :0;
};
//SIG(1 L_BFu7ll_BFu0ll) C1{ FL FL:7 FL:0}



static void Test_L_BFu7ll_BFu0ll()
{
  {
    init_simple_test("L_BFu7ll_BFu0ll");
    static STRUCT_IF_C L_BFu7ll_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu0ll, L_BFu7ll_BFu0ll)
//============================================================================


struct  L_BFu7ll_BFu0s  {
  __tsi64 v1;
  __tsu64 v2:7;
  unsigned short  :0;
};
//SIG(1 L_BFu7ll_BFu0s) C1{ FL FL:7 Fs:0}



static void Test_L_BFu7ll_BFu0s()
{
  {
    init_simple_test("L_BFu7ll_BFu0s");
    static STRUCT_IF_C L_BFu7ll_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7ll_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7ll_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu7ll_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7ll_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7ll_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7ll_BFu0s, L_BFu7ll_BFu0s)
//============================================================================


struct  L_BFu7s_BFu0c  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned char  :0;
};
//SIG(1 L_BFu7s_BFu0c) C1{ FL Fs:7 Fc:0}



static void Test_L_BFu7s_BFu0c()
{
  {
    init_simple_test("L_BFu7s_BFu0c");
    static STRUCT_IF_C L_BFu7s_BFu0c lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu0c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu0c)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu0c.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu0c");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu0c");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu0c, L_BFu7s_BFu0c)
//============================================================================


struct  L_BFu7s_BFu0i  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned int  :0;
};
//SIG(1 L_BFu7s_BFu0i) C1{ FL Fs:7 Fi:0}



static void Test_L_BFu7s_BFu0i()
{
  {
    init_simple_test("L_BFu7s_BFu0i");
    static STRUCT_IF_C L_BFu7s_BFu0i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu0i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu0i)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu0i.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu0i");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu0i");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu0i, L_BFu7s_BFu0i)
//============================================================================


struct  L_BFu7s_BFu0ll  {
  __tsi64 v1;
  unsigned short v2:7;
  __tsu64  :0;
};
//SIG(1 L_BFu7s_BFu0ll) C1{ FL Fs:7 FL:0}



static void Test_L_BFu7s_BFu0ll()
{
  {
    init_simple_test("L_BFu7s_BFu0ll");
    static STRUCT_IF_C L_BFu7s_BFu0ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu0ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu0ll)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu0ll.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu0ll");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu0ll");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu0ll, L_BFu7s_BFu0ll)
//============================================================================


struct  L_BFu7s_BFu0s  {
  __tsi64 v1;
  unsigned short v2:7;
  unsigned short  :0;
};
//SIG(1 L_BFu7s_BFu0s) C1{ FL Fs:7 Fs:0}



static void Test_L_BFu7s_BFu0s()
{
  {
    init_simple_test("L_BFu7s_BFu0s");
    static STRUCT_IF_C L_BFu7s_BFu0s lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(L_BFu7s_BFu0s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(L_BFu7s_BFu0s)");
    check_field_offset(lv, v1, 0, "L_BFu7s_BFu0s.v1");
    set_bf_and_test(lv, v2, 8, 0, 7, 1, "L_BFu7s_BFu0s");
    set_bf_and_test(lv, v2, 8, 0, 7, hide_ull(1LL<<6), "L_BFu7s_BFu0s");
  }
}
ARRANGE_TO_CALL_ME(Test_L_BFu7s_BFu0s, L_BFu7s_BFu0s)
//============================================================================

